2017-04-21 15 views
0

私は各要素に無制限の子を持つ配列を持っています。例えば、それぞれの子供は自分自身の子供を持つことができます。 今、私は子供のための各要素をチェックしていて、foreachを実行していますが、再帰関数を使用したいと思います。 私が直面している問題は、各ツリーレベルで前のブランチをすべて印刷する方法です。ツリー構造の配列を表示し、その前にそれぞれの枝が表示されます

私の配列構造は、次のようになります。私はツリーがありますどのように多くのレベルを知ることができない

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

私は何を達成しようとしていることは、このようなディスプレイです:

動物

動物>犬は

動物>犬>レトリーバー

動物>犬>レトリバー>ゴールデンレトリバー

私が達成しようとしているものの例は、ここにあります。https://developers.google.com/adwords/api/docs/appendix/verticals

誰もどこから始めたいのか、同様の問題に直面しているのか分かりませんか?すべてのヘルプは、あなたがRecursiveIteratorIteratorRecursiveArrayIteratorを使用してこれを行うことができます

答えて

1

を高く評価されています。ここでは

$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; 
} 

working demoです。

関連する問題