【问题标题】:Is there a cleaner way to filter by key's value?有没有更干净的方法来按键的值过滤?
【发布时间】:2012-03-21 17:38:41
【问题描述】:
$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];
}

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

【问题讨论】:

    标签: php arrays filter


    【解决方案1】:

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

    【讨论】:

    • 绝对是我想要的方式。需要注意的是,array_filter 会保留原始数组中的键。
    • +1 这是最好的答案。对于早于 5.3 的 PHP,匿名函数应替换为 create_function() 调用。就像使用旧 PHP 版本的人的通知一样。
    【解决方案2】:

    您可以编写一个函数来执行此操作,然后使用array_walkarray_filter,仅此而已。

    我认为清理它的唯一方法是更改​​原始数据结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      • 2022-09-30
      • 2023-03-07
      • 2014-02-01
      • 1970-01-01
      相关资源
      最近更新 更多