过滤器关联数组php

时间:2017-10-03 10:08:39

标签: php arrays associative-array

有人可以帮助我,因为我被困住了。

我有这个关联数组:

$items= [
  [ 'name' => 'Waffles', 'type' => 'dog', 'age'  => 10],
  [ 'name' => 'Fluffy', 'type' => 'cat', 'age'  => 14],
  [ 'name' => 'Spelunky', 'type' => 'dog', 'age'  => 4],
  [ 'name' => 'Hank', 'type' => 'dog', 'age'  => 11],
];

我想按年龄>使用array_filter()过滤它10;

我已经创建了一个函数,将其与array_filter

一起使用
  function($currentAge){
          return $currentAge > 10;
        }

但我不知道如何只访问这个属性 - 'age'。 谢谢!

3 个答案:

答案 0 :(得分:1)

$items = array_filter($items, function ($item) {
    return $item['age'] > 10;
});

或者您可以将功能更改为

function filterByAge($current) {
    return $current['age'] > 10;
}

答案 1 :(得分:1)

使用如下功能:

$items= [
  [ 'name' => 'Waffles', 'type' => 'dog', 'age'  => 10],
  [ 'name' => 'Fluffy', 'type' => 'cat', 'age'  => 14],
  [ 'name' => 'Spelunky', 'type' => 'dog', 'age'  => 4],
  [ 'name' => 'Hank', 'type' => 'dog', 'age'  => 11],
];

$age_filter = (array_filter($items, "get_age"));

function get_age($array_item) {
    return $array_item['age'] > 10;
}

print_r($age_filter);

DEMO

答案 2 :(得分:0)

松散地说,你可以做类似的事情:

$items= [
  [ 'name' => 'Waffles', 'type' => 'dog', 'age'  => 10],
  [ 'name' => 'Fluffy', 'type' => 'cat', 'age'  => 14],
  [ 'name' => 'Spelunky', 'type' => 'dog', 'age'  => 4],
  [ 'name' => 'Hank', 'type' => 'dog', 'age'  => 11],
];
$filtered = array_filter($items, function ($item) {
      return $item["age"] > 10;
});

但是如果你想要更通用的东西,你可以这样做:

function array_where($array, $column, $function) {
     $indices = array_keys(array_filter(array_column($array,$column),$function));
     return array_intersect_key($array,$indices);
}

然后做:

array_where($items,"age",function ($age) {
    return $age > 10;
})

示例:http://sandbox.onlinephpfunctions.com/code/6c9ff65d517323905c0430bef837a7e13944ca71