php - 单表的邻接树

标签 php tree hierarchy adjacency-list

我读过很多人讨论嵌套列表,但我想知道如何在 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/

相关文章:

javascript - 将平面数组的人转换为 JavaScript 中的嵌套谱系树

php - MySQL 表中的 Twilio 数字数组 - PHP

php - mysqli 函数 bind_result、store_result 和 fetch 之间有什么区别?

php - 无法使用 Auth::user() 仅使用\Auth::user() 获取 user_id Laravel

r - 如何在 R 中将字符串解析为层次结构或树

algorithm - 平衡的树和空间和时间的权衡

php - 使用 PHP MySQL 的类别层次结构(按顺序)

php - php中用户 undefined index 和变量

python - 在 Python 中动态评估简单的 boolean 逻辑

c++ - 双分派(dispatch)和工厂模式