2012-12-18 83 views
0

我試圖使用遞歸函數來構建一個繼承的數組。構建數組的遞歸函數

比方說,我有一個對象「一個」看起來像這樣(用「B」父ID)

a = 'Item 1', 'Item 2', Parent_ID, 'Item 3', 'Item 4' 

而且我有一個對象「B」,看起來像這樣:

b = 'Item X', 'Item Y' 

和所期望的結果是這樣的:

final = 'Item 1', 'Item 2', 'Item X', 'Item Y', 'Item 3', 'Item 4' 

所以基本上是繼續尋找父母我array_splice功能D並插入父項。我的代碼去這個方向:

$master_list = array(); 

getItems("a", $master_list); 

function getItems($ID, &$master_list){ 
    $master_list = retrieve_items($ID); // returns items from "a" 

    //if Parent ID exists, run function again to retrieve items from parent and insert them in place of the Parent ID 
    if(Parent_ID) 
     array_splice($master_list, [parent index], 1, getItems($parentID, $master_list); 
} 

我的函數返回此爲(不需要的)結果:

final = 'Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item X', 'Item Y' 

顯然,這是僞代碼,並只用於獲得指向整個。任何人都可以將我指向正確的方向嗎?我非常感謝。

+0

太困惑... –

回答

0

啊!我能弄明白:

master_list = buildList(list_id) 

function buildList(list_id){ 
    list = getItems(list_id) //example 'A', 'B', parent_id, 'C' 

    if(parent_id){ 

     array_splice(list, index_of_parent_id, 1, buildList(parent_id)) 

    } 

    return list 
} 

我感謝大家的幫助。

0

我會說,像使用array_walk()來解析陣列

function insert_array(&$item1, $key, $userdata) { 
    if($item1 === $userdata['Product_ID']) { 
     $item1 = $userdata['insert']; 
    } 
} 

$data['product_id'] = PRODUCT_ID; 
$data['insert'] = $b; 

array_walk($a,'insert_array',$data); 

注:如果你想要做這樣的事情,而是基於關鍵,而不是看重你可以只使用array_replace()。

不是最優美的,但在這裏。

while(in_array(Parent_ID,$a,false)) { 
    foreach($a as $value) { 
     if($value != Parent_ID) { 
      $temp[] = $value; 
     } else { 
      foreach($b as $key => $value2) { 
      $temp[] = $value2; 
      } 
     } 
    } 
    $a = $temp; 
    unset($temp); 
} 
+0

感謝您的建議。不過,我不確定它會在多個層面上工作。例如,如果$ b中的元素還包含父級ID。 我很抱歉,我應該更具體的要求。 – djbokka

+0

反正它不會工作,這段代碼會把數組放在Product_id中,而不是數組中的片段 – WhyteWolf

+0

我用一種新的方式編輯我的回答。 – WhyteWolf