PHP: Как мне найти в массиве все записи определенного ключа и возвращаемого значения? - PullRequest
4 голосов
/ 13 января 2010

У меня есть многомерный массив, такой как:

$array = array(
  array('test'=>23, 'one'=>'etc' , 'blah'=>'blah'),
  array('test'=>123, 'one'=>'etc' , 'blah'=>'blah'),
  array('test'=>33, 'one'=>'etc' , 'blah'=>'blah'),
);

Как найти в массиве все ключи «test» и получить значение? Я хочу добавить все значения «test», найденные в массиве, чтобы он, например, выдал «214» Массив должен быть любой глубины, но ключ будет одинаковым, несмотря ни на что.

Ответы [ 3 ]

5 голосов
/ 13 января 2010

Для обработки рекурсивных массивов.

$array = array(
  array('test' => 23, 'one' => array("a" => "something", "test" => 28), 'blah' => array("test" => 21)),
  array('test' => 123, 'one' => 'etc' , 'blah' => 'blah'),
  array('test' => 33, 'one' => 'etc' , 'blah' => 'blah'),
);

function recursiveSum($array, $keyToSearch) {
    $total = 0;
    foreach($array as $key => $value) {
        if(is_array($value)) {
            $total += recursiveSum($value, $keyToSearch);
        }
        else if($key == $keyToSearch) {
            $total += $value;
        }
    }
    return $total;
}

$total = recursiveSum($array, "test");
4 голосов
/ 13 января 2010

Используйте array_walk_recursive() для этого:

class Sum { public $total = 0; }
$sum = new Sum;
array_walk_recursive($array, 'add_test', $sum);

function add_test($item, $key, $sum) {
  if ($key == 'test') {
    $sum->total += $item;
  }
}

print $sum->total;

Зачем нужен объект Sum? Потому что в противном случае вы должны вычислить итоговое значение с помощью глобальной переменной, которая в порядке, но может быть грязной. Объекты передаются по ссылке. Вы можете использовать объект для управления такими вещами, как ключ для поиска или что-то еще.

1 голос
/ 13 января 2010
$total = 0;
function crawl( $array ) {
    global $total;

    if( is_array( $array ) ) {
        foreach( $array as $key=>$val ) {

            if( $key === "test" ) {             
                $total = $total + $val;             
            }

            crawl( $val );          
        }
    }

    return $total;  
}

Любая глубина.

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