2013-05-31 9 views
11

Mam tablicę takiego:PHP Recursive Iterator: Klucz nadrzędny aktualnej iteracji macierzy?

$arr = array(
     $foo = array(
      'donuts' => array(
        'name' => 'lionel ritchie', 
        'animal' => 'manatee', 
       ) 
     ) 
    ); 

Stosując tę ​​magię „SPL rekurencyjnych Iterator” i ten kod:

$bar = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); 

    foreach($bar as $key => $value) 
    { 
     echo $key . ": " . $value . "<br>"; 
    } 

mogę przemierzać tablicę wielowymiarową i powrotu klucz => wartość par, takie jak:

nazwa: Lionel Ritchie zwierząt: manatee

Jednak muszę wrócić elementu nadrzędnego bieżącego powtórzyć tablicy, tak więc ...

pączków Nazwa: Lionel Richie pączki zwierzę: manat

Czy to możliwe ?

(stałem tylko świadomy wszystkich rzeczy do „rekurencyjnych iterator”, więc jeśli mi brakuje czegoś oczywiste, przepraszam.)

+0

możliwe duplikat [Get klucz tablicy jest rekurencyjnie i tworzyć podkreślenia oddzielone ciąg] (http://stackoverflow.com/questions/2749398/get-arrays-key-recursively-and-create-underscore -seperowany-ciąg) – salathe

Odpowiedz

14

można uzyskać dostęp poprzez iterator getSubIterator, a w przypadku, gdy chce klucz:

<?php 

$arr = array(
    $foo = array(
     'donuts' => array(
       'name' => 'lionel ritchie', 
       'animal' => 'manatee', 
      ) 
    ) 
); 
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); 

foreach ($iterator as $key => $value) { 
    // loop through the subIterators... 
    $keys = array(); 
    // in this case i skip the grand parent (numeric array) 
    for ($i = $iterator->getDepth()-1; $i>0; $i--) { 
     $keys[] = $iterator->getSubIterator($i)->key(); 
    } 
    $keys[] = $key; 
    echo implode(' ',$keys).': '.$value.'<br>'; 

} 

?> 
+0

Idealny! Wielkie dzięki za szybką reakcję. –

+0

Dziękuję. Jako 'get_leafs()' w znaczeniu https://gist.github.com/szepeviktor/da5dc89110eda7a8d855b3676f1bfd7f –