Запретить массиву возвращать массив с индексом или без индекса в зависимости от входных данных после фильтрации - PullRequest
0 голосов
/ 01 марта 2020

Я упомянул это странное поведение при фильтрации моей коллекции.

Давайте предположим, что я получил этот массив:

 [
       "value" => 1,
       "available" => false,
     ],
     [
       "value" => 3,
       "available" => false,
     ],
     [
       "value" => 6,
       "available" => false,
     ],
     [
       "value" => 12,
       "available" => true,
     ],
     [
       "value" => 24,
       "available" => false,
     ],

Если я теперь использую это для фильтрации всех элементов, где доступно true :

collect($prod->items)->filter(function (
                $item
            ) {
                if (is_array($item)) {
                    return $item['available'] === true;
                }
                if (is_object($item)) {
                    return $item->available === true;
                }

                return false;
            });

я получаю этот результат:

=> Illuminate\Support\Collection {#1010
     all: [
       3 => [
         "value" => 12,
         "available" => true,
       ],
     ],
   }

Если имеется более одного элемента true, я получаю этот результат:

=> Illuminate\Support\Collection {#1006
     all: [
       [
         "value" => 1,
         "available" => true,
       ],
       [
         "value" => 3,
         "available" => true,
       ],
       [
         "value" => 6,
         "available" => true,
       ],
       [
         "value" => 12,
         "available" => true,
       ],
       [
         "value" => 24,
         "available" => true,
       ],
     ],
   }

Вы видели, что индекс (первый пример: 3) здесь отсутствует? Как я всегда могу быть уверен, что индекса нет?

Причина, по которой мне это нужно: я использую результат в ответе API, который используется vue -app. vue -app перебирает массив и печатает значение - но если в результате к префиксу добавляется дополнительный ключ, приложение вылетает.

...