2016-10-02 7 views
-5

私はすべての可能性の組み合わせを返すために配列のウォーカーPHPをしようとしています。子/子要素(無制限の子要素、存在する場合は必ず1つの子要素)を持つ配列を受け取り、titleSanityzedの正しい組合せを返す必要があります。PHPで配列ウォーカーを行う方法

ここで私は、受信アレイ(件のデータがDBから来た)です:

Array 
(
[0] => Array 
    (
     [id] => 1 
     [parentId] => 0 
     [title] => small house 
     [titleSanityzed] => small-house 
    ) 

[1] => Array 
    (
     [id] => 2 
     [parentId] => 0 
     [title] => diy 
     [titleSanityzed] => diy 
     [child] => Array 
      (
       [0] => Array 
        (
         [id] => 4 
         [parentId] => 2 
         [title] => sss 
         [titleSanityzed] => sss 
         [child] => Array 
          (
           [0] => Array 
            (
             [id] => 3 
             [parentId] => 4 
             [title] => xyz 
             [titleSanityzed] => xyz 
            ) 

          ) 

        ) 

      ) 

    ) 

) 

、私はこの配列から達成しようとしている結果は次のとおりです。

Array (
[0] => /small-house 
[1] => /diy 
[2] => /diy/sss 
[3] => /diy/sss/xyz 
) 

誰が指して私を助けることができれば正しい方向に。私は再帰的な配列でtryiedしかし、それは私にすべての可能性の組み合わせを与えません。

ありがとうございます!

+0

ヒント - > 'is_array()' +再帰 –

+0

これはあなたが試したことのコードを表示していないが、基本的には単に "注文する"という3番目の質問です...これは方法ではありませんSOは動作します。 [ask]を読んでください。 – CBroe

+0

私はコードを配置しない理由は、ほとんど実行可能なコードを取得できませんでした。 しかし、私は解決策を見つけました。それは完璧ではありませんが、機能しています。私はここに投稿します。 –

答えて

1

私は解決策を見つけました。私は配列を返したかったので完璧ではありませんでしたが、代わりに私は区切り文字で文字列を作成した後、配列を持つように展開しました。

private function walker($arr, $parent = NULL) { 
    $html = ""; 
    foreach ($arr as $key => $v) 
    { 
      $html .= "$parent{$v['titleSanityzed']}###"; 

     if (array_key_exists('child', $v)) 
      $html .= $this->walker($v['child'],$parent . $v['titleSanityzed']."/"); 
    } 
    return $html; 
} 

$cats = explode("###",trim($this->walker($array,"") , "###")); 

チャームのように働く。