2016-03-02 11 views
2

У меня есть следующий многомерный массив:PHP RecursiveIteratorIterator не выводит все ключи

$array = array(
    1 => null, 
    2 => array(
    3 => null, 
    4 => array(
     5 => null, 
    ), 
    6 => array(
     7 => null, 
    ), 
) 
); 

Если я использую следующий код для итерации по массиву

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); 
foreach ($iterator as $key => $value) { 
    echo $key.' '; 
}   

он выдает только ключи не массивов, присвоенных им. То есть

1 3 5 7 

Как я могу заставить его включить все ключи?

ответ

6

Вам просто нужно установить режим вправо. Из manual:

RecursiveIteratorIterator :: SELF_FIRST - Списки листьев и родителей в итерации с родителями приходят первые.

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array) 
              , RecursiveIteratorIterator::SELF_FIRST); 
+0

, кажется, работает: http://sandbox.onlinephpfunctions.com/code/8ed757e1a0ac69ada40b7ac48ba7996e6389bc22 –

+0

'' SELF_FIRST' и режимы CHILD_FIRST' оба дают элементы без листьев (в вашем случае, массивы) , тогда как режим LEAVES_ONLY по умолчанию - нет. – salathe

+0

Фантастический! (Я уверен, что я это пробовал) – nick