基于元素值的Laravel过滤器数组

问题描述 投票:0回答:1

我有以下数组,我需要对其进行过滤,只得到具有以下特征的元素 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
  ]
]

我正试图用 Arr::where 但我没有得到预期的结果,有谁可以帮助我吗?

尊敬的各位

php laravel laravel-5
1个回答
3
投票
$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
投票

你可以使用集合 where:

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

1
投票

您可以使用 array_filter 并在里面给你需要的条件。

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

print_r($data);
© www.soinside.com 2019 - 2024. All rights reserved.