我有一个关联数组数组,如下所示。
$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");
但它并没有按我预期的方式工作,请指导如何通过指定数组的已筛选键进行筛选。
您可以在PHP>=5.3中使用闭包(或匿名函数)来实现这一点。
$list = array_filter($list, function($a) {
return $a['coins'] < 30;
});
此外,正如Shankar Damodaran在评论中所说,当调用array_filter()
时,您的函数名称中确实存在拼写错误。
以下是对PHP5.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);
});