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);
});