是否有更简洁的方法按键值过滤?

时间:2012-03-21 17:38:41

标签: php arrays filter

$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];
}

是否有更清洁的方法来完成上述所有工作?

2 个答案:

答案 0 :(得分:7)

您是否尝试过使用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_values()array_multisort()

跟进array_filter()

答案 1 :(得分:1)

您可以编写一个函数来执行此操作,然后使用array_walkarray_filter,但这就是它。

我唯一可以看到清理它的方法就是更改原始数据结构。