Как я могу объединить несколько массивов с одним и тем же ключом? - PullRequest
0 голосов
/ 07 октября 2019

У меня есть функция поиска для фильтрации полей. Когда я пропускаю фильтр по разным полям, функция работает правильно. Но когда я запрашиваю фильтр с тем же полем и разными значениями, он возвращает только последнее значение.

Мои функции:

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 может мне помочь?

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Я думаю, что ваш метод поможет вам. если вы хотите фильтровать, как вы сказали: ваш URL должен быть таким, это будет легко:

localhost/project/api/Articles?filterbyid=1,2

НЕ так, как это localhost/project/api/Articles?filter=id:1,id:2 будет затруднительно проскальзывать строку.

Используя это для извлечения вашей строки фильтра: string_filer = $this->request->getData('filterbyid') и это очистит вашу строку $str_clean = preg_replace(',', '',$pattern); после того, как вы получили те, которые вы просто разрезали в массив, используя эту $array_filter = str_split($str_clean , 1);, чтобы вы получили два массива 1 и 2.

наконец то, что вы хотите, чтобы данные, так что вы просто используете метод in_array, чтобы проверить и сравнить ваши данные и этот массив фильтра сделано.

пожалуйста, дайте мне знать, если вы все еще хотите что-то еще.

0 голосов
/ 07 октября 2019

Зачем вам нужно array_merge? Вы можете просто:

$filter[] = $arr2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...