php – 单表的邻接树
作者:互联网
我已经阅读了很多讨论嵌套列表的人,但我想知道如何在PHP中迭代一个adjacancy list / tree.
我有一个表: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.
标签:adjacency-list,php,tree,hierarchy 来源: https://codeday.me/bug/20190730/1584950.html