编程语言
首页 > 编程语言> > php – 单表的邻接树

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