获取给定级别的所有级别子级列表

时间:2013-01-06 19:28:36

标签: php mysql codeigniter

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

我有点失落,感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

在您的情况下,数据库组织不正确。 使用您当前的数据库结构,您将只能获得一个深度级别。 含义SELECT * FROM pages WHERE parent_page_id = 1。这将为您提供page_id=1的孩子。如果这些孩子中的任何一个还有孩子,您需要为每个孩子做SELECT * FROM pages WHERE parent_page_id = the_child_id

这将是资源使用不足。我建议你尝试使用类似于this one的模型 它允许您通过一个查询获得父母的所有孩子。

答案 1 :(得分:0)

基于this示例,您应该可以使用以下内容: (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下面的所有子项。