У меня есть функция поиска для фильтрации полей. Когда я пропускаю фильтр по разным полям, функция работает правильно. Но когда я запрашиваю фильтр с тем же полем и разными значениями, он возвращает только последнее значение.
Мои функции:
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
Но я получаю в ответ только 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 /Статьи? 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",
}
То, что я хочу, это:? 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",
}
Я думаю, что моя проблема - это array_merge, когда это одно и то же поле заменяет первое значение на последнее.
Somenone может мне помочь?