PHP: массив элементов с определенным ключом - PullRequest
1 голос
/ 23 декабря 2009

У меня есть такой массив PHP (без синтаксиса):

array
(
    ['one'] => array (
                      ['wantedkey'] => 5
                      ['otherkey1'] => 6
                      ['otherkey2'] => 7
                     )
    ['two'] =>  => array (
                      ['otherkey1'] => 5
                      ['otherkey2'] => 6
                      ['wantedkey'] => 7
                     )
    ['three'] =>  => array (
                      ['otherkey1'] => 5
                      ['wantedkey'] => 6
                      ['otherkey2'] => 7
                     )
)

Как лучше всего печатать значения только для элементов с ключом 'wantedkey', если я, например, использую array_walk_recursive?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 23 декабря 2009

Разве не нравится эта работа?

function test_print($item, $key) {
  if ($key === 'wantedkey') {
    print $item;
  }
}

array_walk_recursive($myarray, 'test_print');

Или я что-то упускаю в ваших требованиях? [Я думаю, я был]

Так что лучшим способом справиться с тем, что вы ищете, было бы что-то вроде:

function inner_walk ($item, $key) {
  if ($key === 'wantedkey2') {
    print $item;
  }
}

function outer_walk ($item, $key) {
  if (($key === 'wantedkey1') && (is_array($item)) {
    array_walk($item,'inner_walk');
  }
}

array_walk($myarray,'outer_walk');

Проблема с array_walk_recursive заключается в том, что она не говорит вам, где вы находитесь в массиве. Теоретически вы могли бы применить что-то похожее с array_walk_recursive к вышеприведенному, но поскольку вы представили только двумерный массив, использование array_walk должно работать просто отлично.

0 голосов
/ 23 декабря 2009

Возможно, я и здесь что-то упускаю, но почему бы просто не заняться над ними?

foreach($myarray as $subarray) {
    echo $subarray['wantedkey'];
}

Непосредственно не отвечает на ваш первоначальный вопрос, поскольку в нем не используется array_walk_recursive, но, похоже, он выполняет то, что вы спрашиваете, с меньшей сложностью. Я неправильно понял?

...