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

Bel*_*eró 2 php laravel laravel-5

我有以下数组,我需要对其进行过滤并仅获取具有的元素 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
  ]
]
Run Code Online (Sandbox Code Playgroud)

这是预期的结果:

array:2 [
  0 => array:3 [
    "id" => 1
    "name" => "Agua Corriente"
    "type" => 1
  ]
  1 => array:3 [
    "id" => 2
    "name" => "Cloaca"
    "type" => 1
  ]
]
Run Code Online (Sandbox Code Playgroud)

我试图用Arr::where助手解决它,但我没有得到预期的结果。有没有人可以帮助我?

问候

pr1*_*nc3 7

$filteredArray = Arr::where($myArray, function ($value, $key) {
    return $value['type'] == 1;
});
Run Code Online (Sandbox Code Playgroud)

这就是您可以Arr::where在阵列中使用的方式,并且应该可以正常工作。

同样对于像这样的laravel 集合有非常方便的工具,你也应该看看它。

如果您想根据动态分配的变量进行过滤,大多数情况下您可以简单地将其注入到嵌套函数中,例如:

    $type = 1;
    $filteredArray = Arr::where($myArray, function ($value, $key) use($type) {
        return $value['type'] == $type;
    });
Run Code Online (Sandbox Code Playgroud)


nas*_*nas 6

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

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

print_r($data);
Run Code Online (Sandbox Code Playgroud)


Tsa*_*oga 5

您可以使用集合where

collect($array)->where('type', 1)->all();
Run Code Online (Sandbox Code Playgroud)