2013-01-06 123 views
1
id_page | id_parent | title 
----------------------------- 
    1   0   sth1 
    2   1   asd 
    3   1   qwe 
    4   2   are 
    5   4   gds 
    6   5   lkj 
    7   4   nmn 

- 1 
---- 2 
--------- 4 
------------- 5 
------------------6 
--------------7 
---- 3 

我想要實現的是獲得給定id_page的所有子級別的單個級別數組。深度沒有限制。獲取給定級別的所有級別兒童的列表

對於id_page 2,我應該得到array(4,5,6,7)或id_page 4,我應該得到array(5,6,7

我有點失落,感謝所有幫助。

+1

我希望你認爲從id_page 2應該是數組(4)和從id_page 4 =>數組(5,7)? – tnanoba

+0

@DaHaKa @DaHaKa糾正,但我需要的是:2應該返回所有親屬(如家庭樹)爲4,7,5,6 ..所以4應該返回5,6,7 – YahyaE

+0

這是不合邏輯的或我不明白的問題。 .. – tnanoba

回答

0

基於this exampel你應該能夠使用這樣的: (PS:這一切都不是睾丸,但基本流程顯示是正確的)

$root_id = 2; 
$stack = array(); 
$childList = array(); 

array_push($stack, $root_id); 

while (count($stack) > 0) { 
    $current = array_pop($stack); // Depth first search 
    //$current = array_shift($stack); //Breadth first search 


    //array_push($stack, $treearr[$current]['children']); Maybe?? Something you'll have to check 
    //array_push($childList, $treearr[$current]['children']); 


    for ($treearr[$current]['children'] as $child) { 
    array_push($stack, $child); 
    array_push($childList, $child); 
    } 
} 

childList應該包含所有的孩子發現在root_id之下。

1

在你的情況下,數據庫組織不正確。 使用您當前的數據庫結構,您將只能獲得一個深度級別。 含義SELECT * FROM pages WHERE parent_page_id = 1。這會給你page_id=1的孩子。如果其中的任何一個孩子也有孩子,則需要爲每個孩子做SELECT * FROM pages WHERE parent_page_id = the_child_id

這將是不足的資源使用情況。我建議你嘗試使用類似於this one的模型。
它可以讓你獲得一個父母的所有孩子一個查詢。

+0

現在我沒有這個機會了。我用php構建了一個數組,將平坦的結果重建爲兒童索引的多維數組。我應該如何繼續? – YahyaE

+0

你可以舉一個你目前在php中做了什麼的例子嗎? – tftd

+0

這是我在php上做的:pastebin.com/jqFHGPBe – YahyaE