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

我有点迷路了,感谢任何帮助。

4

2 回答 2

1

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

那将是资源使用不足。我建议您尝试使用与此类似的模型
它将允许您通过一个查询获取父级的所有子级。

于 2013-01-06T19:45:57.043 回答
0

基于这个例子你应该可以使用这样的东西:(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

于 2013-01-06T20:48:33.517 回答