2013-05-31 6 views
11

devo un array come questo:Iteratore ricorsivo PHP: chiave principale dell'iterazione corrente dell'array?

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

Utilizzando che la magia del 'SPL ricorsivo Iterator' e questo codice:

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

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

posso attraversare l'array multidimensionale e restituire la chiave => valore coppie, quali:

nome: Lionel Richie animale: lamantino

Tuttavia, ho bisogno di tornare l'elemento principale della matrice iterato corrente e, in modo ...

ciambelle nome: Lionel Richie ciambelle animale: lamantino

Questo è possibile ?

(sono diventato solo a conoscenza di tutte le cose del 'ricorsivo Iterator', quindi se mi manca qualcosa di ovvio, mi scuso.)

+0

possibile duplicato della [Get chiave dell'array in modo ricorsivo e creare sottolineatura stringa separati] (http://stackoverflow.com/questions/2749398/get-arrays-key-recursively-and-create-underscore -separata) – salathe

risposta

14

È possibile accedere alla iteratore via getSubIterator, e nel tuo caso vuole la chiave:

<?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

Perfetto! Mille grazie per la rapida risposta. –

+0

Grazie. Come 'get_leafs()' in un succo https://gist.github.com/szepeviktor/da5dc89110eda7a8d855b3676f1bfd7f –