首页 >数据库 >mysql教程 >如何在 PHP/MySQL 中不使用递归构建无序列表菜单树?

如何在 PHP/MySQL 中不使用递归构建无序列表菜单树?

Patricia Arquette
Patricia Arquette原创
2024-11-03 19:24:29865浏览

How to Build an Unordered List Menu Tree in PHP/MySQL Without Recursion?

PHP/MySQL 无序列表菜单树构建:非递归单数据库查询方法

从数据库查询构建无序列表菜单树是一项共同的任务。通常,使用多次查询数据库的递归函数。然而,使用单个数据库查询可以使用更有效的非递归方法。

给定一个具有 id、title 和parent_id 属性的页面对象数组,目标是创建一个函数来生成 HTML无序列表菜单。

解决方案:

我们的解决方案采用以下步骤:

  1. 创建一个辅助函数 has_children,以确定如果给定的parent_id在数组中有任何子项。
  2. 实现一个build_menu函数,迭代页面对象并递归构造菜单列表。
  3. 使用初始父ID 0调用build_menu以创建菜单树的根。

代码:

<code class="php">function has_children($rows, $id) {
  foreach ($rows as $row) {
    if ($row['parent_id'] == $id){
      return true;
    }
  }
  return false;
}

function build_menu($rows, $parent=0) {
  $result = "<ul>";
  foreach ($rows as $row) {
    if ($row['parent_id'] == $parent){
      $result.= "<li>{$row['title']}";
      if (has_children($rows,$row['id'])) {
        $result.= build_menu($rows,$row['id']);
      }
      $result.= "</li>";
    }
  }
  $result.= "</ul>";

  return $result;
}</code>

用法示例:

<code class="php">$menu = [
  ['id' => 1, 'title' => 'Menu 1', 'parent_id' => null],
  ... // Additional menu objects
];

echo build_menu($menu); // Outputs the complete menu list</code>

优点:

  • 非递归方法消除了堆栈溢出的风险。
  • 单一数据库查询确保高效的数据检索。
  • 模块化设计有利于可维护性和可重用性。

以上是如何在 PHP/MySQL 中不使用递归构建无序列表菜单树?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn