Php 使用回调函数的自定义数组过滤器

Php 使用回调函数的自定义数组过滤器,php,arrays,Php,Arrays,我有一个关联数组,如下所示 $list = array( array("animal" => 0, "color" => 0, "coins" => 10), array("animal" => 0, "color" => 1, "coins" => 20), array("animal" => 0, "color" => 2, "coins" => 10), array("animal" => 1, "color" =

我有一个关联数组,如下所示

$list = array(
  array("animal" => 0, "color" => 0, "coins" => 10),
  array("animal" => 0, "color" => 1, "coins" => 20),
  array("animal" => 0, "color" => 2, "coins" => 10),
  array("animal" => 1, "color" => 0, "coins" => 55),
  array("animal" => 1, "color" => 1, "coins" => 25),
  array("animal" => 1, "color" => 2, "coins" => 10)
);
我想过滤数组,使其仅在“coins”<30时保留,所以我尝试了

function less_than_10($var) {
  return ($var < 30);
}

array_filter($list, "less_then_10");
函数小于10($var){
回报($var<30);
}
数组过滤器($list,“小于等于10”);
但是它没有按我预期的方式工作,请通过指定数组的筛选键来指导如何进行筛选。

您可以使用PHP>=5.3中的a(或匿名函数)来完成此操作

$list = array_filter($list, function($a) {
    return $a['coins'] < 30;
});
$list=array\u过滤器($list,function($a){
返回$a[“硬币”]<30;
});
另外,正如Shankar Damodaran在他的评论中所说,调用
array\u filter()


.

需要指出三个要点:

  • 您有一个多维数组,因此需要更改
    return($var<30)
    返回($var['coins']<30)

  • array\u filter()
    返回数组。您必须将返回值存储到变量中,以便以后能够使用它

  • 您的回调函数
    less\u中有一个输入错误,那么\u 10
    应该是
    less\u-than\u 10

修改代码:

function less_than_30($arr) {
    return ($arr['coins'] < 30);
}

$result = array_filter($list, "less_than_30");
print_r($result);

你有一个打字错误。。这应该是
小于\u 10
很好的答案。我正要添加一个
使用
的示例,但我看到你这么做了,不想复制:P。你刚刚介绍了所有内容,包括我未来的问题,谢谢:P参考,虽然匿名函数确实很好,但使用常规函数也可以。真正的解决方法在于filter函数正在比较什么,以及如何处理
array\u filter
+1的返回值:这是正确的。但我不确定OP是否希望得到硬币值小于30或10的子数组。你们都是对的。。谢谢你的意见!嘿,这是一场双赢,因为我们三个人都是对的!:)
$result = array_filter($list, function ($arr) {
    return ($arr['coins'] < 30);
});
$min = 10; // Change this value as necessary

$result = array_filter($list, function ($arr) use ($min) {
    return ($arr['coins'] < $min);
});