0

再帰で発生した問題を理解するのに苦労しています。階層を一方向にのみトラバースし、各親のすべての子を配列に追加しています。

ただし、再帰を使用している間、その配列に継続的に追加する最良の方法を完全に理解することはできません。

これが私の関数がこれまでにどのように見えるかです。誰かがこれで私を正しい方向に押し進めることができれば、非常に感謝しています。

function getTaxChildrenList($cat, $data){

    $next = get_terms('location_types', 'orderby=count&hide_empty=0&parent='.$cat);

    if(count($next)){
        $result = array();
        foreach($next as $next_key => $next_level){
            $result[$next_level->term_id] = $this->getTaxChildrenList($next_level->term_id, $result);
        }
    }

    return $result;

}   

必要に応じて構造が返されましたが、これらの子のそれぞれのオブジェクトを実際にキーに追加する必要があり、これが私の基本ケースであると推測しています。

スクリーンショット -> http://cl.ly/image/1z1v2S243f3H

4

2 に答える 2

0

これは仕事をするはずです

function getTaxChildrenList($cat) { //no second parameter
  $next = get_terms('location_types', 'orderby=count&hide_empty=0&parent='.$cat);
  $result = array();
  //base case would be count($next) == 0
  if(count($next)){
    foreach($next as $next_level){
      //add recursively arrays
      $recur = $this->getTaxChildrenList($next_level->term_id);
      if(count($recur) == 0)
        $result[$next_level->term_id] = $next_level;
      else
        $result[$next_level->term_id] = $recur;
    }
  }
  return $result;
} 
于 2013-07-18T08:13:57.400 に答える