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,检查此链接它将帮助您: