Laravel массив фильтров на основе значения элемента - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть следующий массив, который мне нужен, чтобы отфильтровать его и получить только элементы, которые имеют type = 1

array:5 [
  0 => array:3 [
    "id" => 1
    "name" => "Agua Corriente"
    "type" => 1
  ]
  1 => array:3 [
    "id" => 2
    "name" => "Cloaca"
    "type" => 1
  ]
  2 => array:3 [
    "id" => 3
    "name" => "Gas Natural"
    "type" => 2
  ]
  3 => array:3 [
    "id" => 4
    "name" => "Internet"
    "type" => 3
  ]
  4 => array:3 [
    "id" => 5
    "name" => "Electricidad"
    "type" => 3
  ]
]

Это ожидаемый результат:

array:2 [
  0 => array:3 [
    "id" => 1
    "name" => "Agua Corriente"
    "type" => 1
  ]
  1 => array:3 [
    "id" => 2
    "name" => "Cloaca"
    "type" => 1
  ]
]

I ' Я пытаюсь решить эту проблему с помощью Arr::where помощника, но я не получаю ожидаемого результата. Кто-нибудь может мне помочь?

С уважением

Ответы [ 3 ]

3 голосов
/ 24 апреля 2020
$filteredArray = Arr::where($myArray, function ($value, $key) {
    return $value['type'] == 1;
});

Это то, как вы можете использовать Arr::where в вашем массиве, и оно должно работать нормально.

Также для подобных вещей laravel коллекции У вас есть действительно удобные инструменты, вы также должны взглянуть на них.

Если вы хотите фильтровать на основе динамически назначаемой переменной, то в большинстве случаев вы можете просто вставить ее во вложенный каталог. функция как:

    $type = 1;
    $filteredArray = Arr::where($myArray, function ($value, $key) use($type) {
        return $value['type'] == $type;
    });
1 голос
/ 24 апреля 2020

Вы можете использовать array_filter, и внутри задайте необходимое вам условие.

$data = array_filter($array, function ($item) {
    return $item["type"] === 1;
});

print_r($data);
1 голос
/ 24 апреля 2020

Вы можете использовать коллекцию where:

collect($array)->where('type', 1)->all();
...