首页 >数据库 >mysql教程 >如何在没有递归的情况下在 PHP/MySQL 中创建树形菜单?

如何在没有递归的情况下在 PHP/MySQL 中创建树形菜单?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-27 20:45:02979浏览

How to Create a Tree Menu in PHP/MySQL Without Recursion?

PHP / MySQL 无需递归构建树形菜单

背景:

从数据库数据构建树形菜单可以是共同任务。本文探讨了如何在不使用递归的情况下从 PHP 页面对象数组构造无序列表 (UL) 菜单树。

数据设置:

您的页面对象有以下属性:

  • id
  • title
  • parent_id(根页面设置为 null)

功能概述:

我们将创建一个函数,它接受页面对象数组并生成相应的 HTML UL 树。

辅助函数:has_children()

此函数检查页面是否有子页面。

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

递归 Build_Menu() 函数

build_menu() 函数迭代数组并生成 HTML UL 树。它使用变量 $parent 来跟踪当前父页面。

<code class="php">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>

输出:

将页面对象数组传递给 build_menu() 后函数,您可以回显生成的 HTML UL 树。输出将是代表数据库数据的嵌套 UL 菜单结构。

<code class="php">echo build_menu($menu);</code>

以上是如何在没有递归的情况下在 PHP/MySQL 中创建树形菜单?的详细内容。更多信息请关注PHP中文网其他相关文章!

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