有没有一种更简洁的方式来按键的值进行过滤?
问题描述:
$a = array(
0 => array('one' => 1, 'two' => 2),
1 => array('one' => 3, 'two' => 4),
2 => array('one' => 5, 'two' => 2)
);
$c = count($a);
$r = array();
for ($i = 0; $i < $c; $i++)
{
if ($a[$i]['two'] == 2)
$r[] = $a[$i];
}
有没有一种更清洁的方式,然后做所有上述?有没有一种更简洁的方式来按键的值进行过滤?
答
您是否尝试过使用array_filter()
?
$r = array_filter($a, function($var) {
return ($var['two'] === 2);
});
的上面的输出比你原来的代码稍有不同:
Yours:
array(
0 => array('one' => 1, 'two' => 2),
1 => array('one' => 5, 'two' => 2)
)
Using array_filter:
array(
0 => array('one' => 1, 'two' => 2),
2 => array('one' => 5, 'two' => 2) // Note the key is 2, not 1
)
如果您需要的键折叠,则可以跟进array_filter()
与array_values()
或array_multisort()
绝对是我会去的方式。注意'array_filter'持久保存原始数组中的键是很重要的。 – 2012-03-21 17:44:43
+1这是最好的答案。对于5.3以前的PHP,匿名函数应该用['create_function()'](http://php.net/manual/en/function.create-function.php)调用替换。正如对于PHP版本较老的人的通知一样。 – Tadeck 2012-03-21 17:53:04