Php 如何使用同一密钥合并多个数组?

Php 如何使用同一密钥合并多个数组?,php,cakephp,Php,Cakephp,我有一个搜索功能来过滤字段。当我通过不同字段上的过滤器时,函数正常工作。但是当我要求使用相同字段和不同值的过滤器时​​它只返回最后一个值 我的职责: public function setParams($params) { $filter = []; if(isset($params['filter'])) { $param = $params['filter']; $arrs = explode(',', $param);

我有一个搜索功能来过滤字段。当我通过不同字段上的过滤器时,函数正常工作。但是当我要求使用相同字段和不同值的过滤器时​​它只返回最后一个值

我的职责:

public function setParams($params) {
        $filter = [];


    if(isset($params['filter'])) {
       $param = $params['filter'];
       $arrs = explode(',', $param);
       foreach($arrs as $arr) {
         $arr1 = explode(':', $arr);
         $arr2 = [$arr1[0] => $arr1[1]];
         $filter = array_merge($filter, $arr2);
       }
       $filter = str_replace(' ', '', $filter);
   }

$ress = ['filter' => $filter];
return $ress;
例: 如果我想要过滤器id1和id2: localhost/project/api/Articles?filter=id:1,id:2

Response: "data": [
                {
                    "id": 1,
                    "name": "Ribeirao Preto",
                    "shortname": "RP",
                    "uf": "SP",
                    "status": true,
                    "created": "2019-07-23T14:17:43+00:00",
                    "modified": "2019-08-22T12:32:21+00:00",
                },
                {
                    "id": 2,
                    "name": "Sao Paulo",
                    "shortname": "SP",
                    "uf": "SP",
                    "status": true,
                    "created": "2019-07-23T14:17:43+00:00",
                    "modified": "2019-08-22T12:32:21+00:00",
                }
但我得到的回应是id2

Ex: "data": [
            {
                "id": 2,
                "name": "Sao Paulo",
                "shortname": "SP",
                "uf": "SP",
                "status": true,
                "created": "2019-07-23T14:17:43+00:00",
                "modified": "2019-08-22T12:32:21+00:00",
            }
如果我通过: localhost/project/api/Articles?filter=id:1,uf:SP 我得到了正确的回答:

Ex: "data": [


 {
            "id": 2,
            "name": "Sao Paulo",
            "shortname": "SP",
            "uf": "SP",
            "status": true,
            "created": "2019-07-23T14:17:43+00:00",
            "modified": "2019-08-22T12:32:21+00:00",
        },
        {
            "id": 1,
            "name": "Ribeirão Preto",
            "shortname": "RP",
            "uf": "SP",
            "status": true,
            "created": "2019-07-23T14:17:43+00:00",
            "modified": "2019-08-22T12:32:21+00:00",
        }
我想要的是: ?过滤器=id:1,id:2

Response: "data": [
                {
                    "id": 1,
                    "name": "Ribeirao Preto",
                    "shortname": "RP",
                    "uf": "SP",
                    "status": true,
                    "created": "2019-07-23T14:17:43+00:00",
                    "modified": "2019-08-22T12:32:21+00:00",
                },
                {
                    "id": 2,
                    "name": "Sao Paulo",
                    "shortname": "SP",
                    "uf": "SP",
                    "status": true,
                    "created": "2019-07-23T14:17:43+00:00",
                    "modified": "2019-08-22T12:32:21+00:00",
                }
我认为我的问题是数组合并,当它是同一个字段时,它会用最后一个值替换第一个值


没有人能帮我吗?

为什么需要
数组\u合并
?你可以简单地:

$filter[]=$arr2;

我想你会帮你的。如果你想像你说的那样过滤: 您的url应如下所示,这将很容易:

localhost/project/api/Articles?filterbyid=1,2
不像这样
localhost/project/api/Articles?filter=id:1,id:2
这会使字符串很难滑动

使用它来检索您的筛选字符串:
string\u filer=$this->request->getData('filterbyid')
,这将清理您的字符串
$str\u clean=preg\u replace(',','','',$)
在你得到这些之后,你只需要使用这个
$array\u filter=str\u split($str\u clean,1)将它分割成数组因此您将得到两个数组1和2

最后,您希望该数据是什么,所以您只需使用数组中的
方法检查并比较您的数据和过滤器数组


如果你还想要更多的东西,请告诉我

然后用所需的
$filters
的精确输出更正您的示例,从您的示例中,您只需要所有ID。对不起,我不明白。我不想要所有的ID,我只想要id1和id2。您的示例返回所有ID。
setParams()
只返回最后一个ID,如下所示。我不知道您的others函数是如何工作的,因此我要求您提供
setParams()
函数的精确输出。$filter[]=$arr2的输出不起作用,因为它在另一个数组中返回一个数组array@Bruny你需要什么?:)举个例子吧!如果传递两个ID,最终输出是什么<代码>{“id”:“1”}
如果您正确传递了一个值,这是什么意思?如果你传递两个值,它是什么样子的<代码>{id:“1”},{id:“2”}
?当我传递2个id时,只返回最后一个id。如果我通过id:1,id:2。我得到id:2这是一个好方法,但我也使用过滤器过滤其他字段。例如名称、uf和其他表中的其他字段。所以我不能有像filterbyid这样的变量。Hello@Bruny,检查此链接它将帮助您: