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
)
我有点失落,感谢任何帮助。
答案 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
下面的所有子项。