我有一组关联数组,如下所示。
$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)
);
我想过滤数组只在"硬币" < 30,所以我试过了。
function less_than_10($var) {
return ($var < 30);
}
array_filter($list, "less_then_10");
但它没有按照我预期的方式工作,请指导如何通过指定数组的过滤键进行过滤。
答案 0 :(得分:4)
您可以使用PHP中的closure(或匿名函数)&gt; = 5.3。
$list = array_filter($list, function($a) {
return $a['coins'] < 30;
});
另外,正如Shankar Damodaran在评论中所说,在致电array_filter()
时,你做在你的函数名中有拼写错误。
答案 1 :(得分:3)
要做的三点:
您有一个多维数组,因此您需要将return ($var < 30);
更改为return ($var['coins'] < 30);
。
array_filter()
返回数组。您必须将返回值存储到变量中,以便以后能够使用它。
您的回调函数less_then_10
中的拼写错误应为less_than_10
。
修改后的代码:
function less_than_30($arr) {
return ($arr['coins'] < 30);
}
$result = array_filter($list, "less_than_30");
print_r($result);
如果回调函数只使用过一次,你可以把它变成一个匿名函数,如下所示:
$result = array_filter($list, function ($arr) {
return ($arr['coins'] < 30);
});
更干净,对吗?但是,现在这个功能有点无意义,因为您无法检查30以外的值。您可以使用use
块扩展其功能:
$min = 10; // Change this value as necessary
$result = array_filter($list, function ($arr) use ($min) {
return ($arr['coins'] < $min);
});