加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 单表的邻接树

发布时间:2020-12-13 21:34:27 所属栏目:PHP教程 来源:网络整理
导读:我已经阅读了很多讨论嵌套列表的人,但我想知道如何在 PHP中迭代一个adjacancy list / tree. 我有一个表:id,title,parent_id 我已经将所有记录选择到一个名为$pages的数组中. 然后使用这个PHP: function makeList($pages,$used) { if (count($pages)) { ech
我已经阅读了很多讨论嵌套列表的人,但我想知道如何在 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读