Ссылка на массив ключей, не зная их имен? - PullRequest
1 голос
/ 12 апреля 2011

Если у меня есть такой массив:

$array = array('something'=>array('more'=>array('id'=> 34)));

Тогда print_r($array['something']['more']['id'] отлично работает.

Но, скажем, имена клавиш могут измениться, но структура не изменится. Как я мог ссылаться на одни и те же значения, не зная имен?

Я думал, что print_r($array[0][1][2] может работать, но, конечно, эти ключи не существуют.

Ответы [ 4 ]

3 голосов
/ 12 апреля 2011

Вы можете использовать оператор foreach.Используйте рекурсивную функцию для обработки вложенных массивов ( не проверено ):

public function iterateNestedArray($array) {
    if (is_array($array)) {
        foreach ($array as $key => $value) {
            print_r(iterateNestedArray($value));
        }
    }
    else {
        return $array;
    }
}

Вы можете рассмотреть реализацию этой функции со вторым аргументом для передачи функции обратного вызова, а не просто print_rкаждое значение.

0 голосов
/ 12 апреля 2011

вы можете сделать прямой цикл с foreach, хотя это довольно некрасиво:

foreach ( $grandparent as $gpkey => $parent ) {
    foreach ( $parent as $pkey => $child ) {
        foreach ( $child as $ckey => $value ) {
            print $gpkey . " - " . $pkey . " - " . $ckey . " = " . $value;
        }
    }
}

Или список ключей можно получить с помощью array_keys():

$keys = array_keys($array);
for ( $i=0, $imax=count($keys); $i<$imax; $i++ ) {
    print $key . " = " . $array[$key];
}
0 голосов
/ 12 апреля 2011

Существует несколько возможностей.

Вы можете использовать arrayiterator или просто foreach .Возможно, даже array_values ​​ может быть вашим решением.

0 голосов
/ 12 апреля 2011

Вы можете использовать reset(), next() и end() как всегда

$array = array('something'=>array('more'=>array('id'=> 34)));
echo reset(reset(reset($array)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...