2013-07-18 144 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