我读过很多人讨论嵌套列表,但我想知道如何在 PHP 中遍历邻接列表/树。
我有一张表:id、title、parent_id
我已经选择了所有记录到一个名为 $pages 的数组中。
然后使用这个 php:
function makeList($pages, $used) {
if (count($pages)) {
echo "<ul>";
foreach ($pages as $page) {
echo "<li>".$page['pag_title'];
$par_id = $page['pag_id'];
$subsql("SELECT * FROM pages WHERE pag_parent = ".$par_id."");
// running the new sql through an abstraction layer
$childpages = $dbch->fetchAll();
makeList($childpages, $used, $lastused);
echo "</li>";
}
echo "</ul>";
}
}
这种方法可行,但我最终会重复任何子菜单,例如
- 首页
- 新闻
- 子新闻
- 文章
- 文章
- 新闻
- 新闻
- 子新闻
- 文章
- >文章
- 子新闻
- 文章
我试过将当前 id 添加到一个通过函数传递的数组中,然后使用 in_array 检查它是否存在,但我并不喜欢这样做。
如有任何帮助,我们将不胜感激。
我需要解析整棵树,所以选择父节点作为 0 不是一个选项
最佳答案
因为它已经执行了 SQL,所以您不必在第一次函数调用之前在外部执行它。
function makeList($par_id = 0) {
//your sql code here
$subsql("SELECT * FROM pages WHERE pag_parent = $par_id");
$pages = $dbch->fetchAll();
if (count($pages)) {
echo '<ul>';
foreach ($pages as $page) {
echo '<li>', $page['pag_title'];
makeList($page['pag_id']);
echo '</li>';
}
echo '</ul>';
}
}
要存储更多树,您可能需要查看此站点:Storing Hierarchical Data in a Database .
关于php - 单表的邻接树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/748155/