2011-11-10 71 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