2013-07-18 111 views
0

我很努力去理解我用递归得到的问题,我只在一个方向上遍历一个hiearchy并将每个父项的所有子项添加到一个数组中。递归添加到阵列

但我不能完全正常工作,但用递归不断添加到阵列的最佳途径。

这里是我的功能看起来像至今。我会很感激,如果有人能够推动我在这个正确的方向。

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

+1

你的调用中的第二个参数在哪里?$ this-> getTaxChildrenList($ next_level-> term_id);'?您需要将结果“增加”的结果,而不是取代...... – Pouki

+0

递归函数必须有一个基本情况。这里的基本情况是什么?目前,$结果将始终为空。 – JLRishe

+0

JLRishe我认为你是对的。基本情况下,将只是添加到数组,并返回我猜... ...? – David

回答

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; 
} 
+0

luk2302你做了大致相同,我这是很好的。我需要做的是将存储在$ next_level中的对象添加到数组中,以便每个级别不只是空的。 – David

+0

因此,每个term_id而不是一个带有term_id的空数组实际上都会存储相关的term_id数据。真的很接近。 – David

+0

@大卫我编辑我的职务,是否符合您的需求? – luk2302

0

因此,也许你需要的东西是这样的:

function getTaxChildrenList($cat){ 

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

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

    return $result; 

} 

它是类似的东西?

+0

JLRishe事实证明,这正是我所需要的。我认为。 :) – David