2011-11-10 70 views
-2

拉着我有這些記錄的數據庫表:使用PHP來顯示樹形結構從數據庫

parent_id child_id  
    0 1 
    0 2 
    0 3 
    0 4 
    0 5 
    0 6 
    0 7 
    0 8 
    0 9 
    0 10 
    0 11 
    0 12 
    1 13 
    1 14 
    1 15 
    2 16 
    2 17 
    2 18 
    3 19 
    3 20 
    3 21 
    4 22 
    4 23 
    4 24 
    5 25 
    5 26 
    5 27 
    6 28 
    6 29 
    6 30 
    7 31 
    7 32 
    7 33 
    7 34 
    1 35 
    1 36 
    1 37 
    1 38 
    1 39 

我想用遞歸函數來建立一個樹形結構父/子。

function recursion ($parentID, $lvl){ 

$query = 'SELECT parent_id, child_id FROM ///// WHERE parent_id='.$parentID;  
$this->_db->setQuery($query); 
$this->_db->query(); 
$records = $this->_db->loadObjectList(); 

$count = count($records); 

    if ($count > 0){ 
      foreach ($records as $item){ 
       print_r ("parent id ".$item->parent_id."child id ".$item->child_id." lvl-> ".$lvl."</br>"); 
       return $this->recursion($item->child_id, $lvl+1); 
     } 
    } 
} 

我的代碼只打印:

parent id 0child id 1 lvl-> 1 
parent id 1child id 13 lvl-> 2 

我無法弄清楚如何打印整個樹。我想我走在正確的道路上。有人能給我一個關於如何打印整棵樹的提示嗎?

+0

Raim,通常最好使用您正在使用的語言標記問題。這可以讓人們發現他們可能能夠回答的問題。 – jmg

+0

不像你這樣做,但也許這可以幫助你:http://crisp.tweakblogs.net/blog/317/formatting-a-multi-level-menu-using-only-one-query.html - - 關於如何構建這樣的樹視圖的簡單而簡短的教程。 – w00

回答

1

刪除返回

下次拿一張紙,並逐行閱讀代碼。寫下會發生什麼。想想看。

現在,如果你想打動你的老師,找出如何做到這一點沒有遞歸。大多數遞歸函數可以做成程序化的,並且它使用更少的內存。

+0

非常感謝你的回答。很高興有人幫助:)刪除返回解決了我的問題,現在它打印所有的父母,然後他們的孩子,如果孩子也有孩子。祝你有個美好的一天Gustav Bertram,再次感謝你:) – Raim

+0

如果答案對你有幫助,你可以**接受**答案。請參閱常見問題以瞭解如何:http://stackoverflow.com/faq#howtoask –

+0

再次,thx。公認。 – Raim

1
  1. 如果你想打印出整棵樹,不要使用遞歸。

  2. 使正確的一個SQL查詢,然後正確輸出你所需要的。

  3. 如果你會告訴更多你想要得到的東西,它可以使你更容易幫助你。

謝謝。

+0

這就是要點,我有我的老師的任務與遞歸做。昨天他說我正走在正確的道路上。正如你所看到的,我的代碼通過記錄,第一個變量是0,所以它從父母0開始,然後它取得父母的孩子(1),然後它返回孩子的價值作爲父母和搜索數據庫與該值,返回1 ,13級正在上升,再次,現在搜索與13作爲父母,然後停止。我想保持它通過所有數據庫。如果它陷入死衚衕(像現在這樣),我希望它回到以前的水平,然後再做一遍,直到所有數據庫都被檢查。 – Raim