2017-04-21 2 views
0

J'ai un tableau avec un nombre illimité d'enfants sur chacun des éléments. Par exemple, chacun des enfants peut avoir ses propres enfants. En ce moment je vérifie chacun des éléments pour les enfants et fais un foreach sur eux, mais je voudrais utiliser une fonction récursive pour cela. Le problème auquel je fais face est, comment imprimer toutes les branches précédentes à chacun des niveaux d'arbre.Affichage d'un tableau avec une structure arborescente et chacune de ses branches précédentes

Ma structure de tableau ressemble à ceci:

[ 0 : { 
      Name : Animals, 
      Children : [ 
      0 : { Name : Dogs, 
        Children : [ 
         0 : { Name : Retrievers, 
          Children : [ 
           0 : { Name : Golden Retriever , 
             Children : [] 
            } 
           ] 
        ] 
        } 
       ] 
     } 
    ] 

Je ne peux pas savoir combien de niveaux l'arbre aura.

Ce que je suis en train de réaliser est un affichage ceci:

Animaux

Animaux> Chiens

Animaux> Chiens> Retrievers

Animaux> Chiens> Retrievers> Golden Retriever

Un exemple de ce que j'essaye de réaliser peut être trouvé ici https://developers.google.com/adwords/api/docs/appendix/verticals

Est-ce que quelqu'un a une idée de l'endroit où commencer ou avoir un problème similaire? Toute aide est appréciée

Répondre

1

Vous pouvez le faire en utilisant RecursiveIteratorIterator et RecursiveArrayIterator:

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($tree)); 

$names = []; 
foreach ($iterator as $name) { 
    // As depth will be increasing by 2, starting from 1, 
    // we need to devide in half and floor. This way our $names array 
    // will have normal sequantial indexes. 
    $depth = floor($iterator->getDepth()/2); 

    $names[$depth] = $name; 

    echo implode(' > ', array_slice($names, 0, $depth + 1)), PHP_EOL; 
} 

est ici working demo.