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

Bri*_*ham 2 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];
}
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*ᚄᚒᚔ 7

你试过用过array_filter()吗?

$r = array_filter($a, function($var) {
  return ($var['two'] === 2);
});
Run Code Online (Sandbox Code Playgroud)

以上输出与原始代码略有不同:

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
)
Run Code Online (Sandbox Code Playgroud)

如果您需要的键折叠,则可以跟进array_filter()array_values()array_multisort()

  • +1这是最好的答案.对于5.3以上的PHP,匿名函数应替换为[`create_function()`](http://php.net/manual/en/function.create-function.php)调用.就像对旧PHP版本的人的通知一样. (3认同)