有没有一种更简洁的方式来按键的值进行过滤?

问题描述:

$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()

+0

绝对是我会去的方式。注意'array_filter'持久保存原始数组中的键是很重要的。 – 2012-03-21 17:44:43

+3

+1这是最好的答案。对于5.3以前的PHP,匿名函数应该用['create_function()'](http://php.net/manual/en/function.create-function.php)调用替换。正如对于PHP版本较老的人的通知一样。 – Tadeck 2012-03-21 17:53:04

你可以编写一个函数来做到这一点,然后使用array_walkarray_filter但这就是它。

只有这样我才能看到清理它会更改原始数据结构。