Есть ли более чистый способ фильтрации по значению ключа? - PullRequest
2 голосов
/ 21 марта 2012
$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 ]

7 голосов
/ 21 марта 2012

Вы пробовали использовать 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()

1 голос
/ 21 марта 2012

Вы можете написать функцию, чтобы сделать это, а затем использовать array_walk или array_filter , но это все.

Единственный способ, которым я могу видеть, чтобы очистить это больше, это изменить исходную структуру данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...