首页  >  文章  >  数据库  >  如何使用 PHP 和 MySQL 构建无限嵌套菜单系统:非递归方法?

如何使用 PHP 和 MySQL 构建无限嵌套菜单系统:非递归方法?

Linda Hamilton
Linda Hamilton原创
2024-10-29 18:41:12426浏览

How to Build a Limitless Nested Menu System with PHP and MySQL: A Non-Recursive Approach?

如何在 PHP 和 MySQL 中显示无限嵌套菜单

问题描述

在嵌套菜单系统中,每个菜单项都可以有子菜单项,它们又可以有自己的子项目。目标是有效地从数据库中获取并显示这些嵌套菜单级别。

代码实现

为了实现这一点,我们可以采用一种非递归方法,其中涉及:

  • 数据库查询:我们查询menu_item表,按其父级和位置对结果进行排序。
  • 多维数组 :我们将检索到的菜单项组织成一个多维数组,其中每个元素代表一个父子关系。
  • 树遍历:我们使用循环遍历这个数组。
  • HTML 生成:我们动态生成嵌套菜单的 HTML 结构。

PHP 函数

这是一个演示上述方法的 PHP 函数:

<code class="php">function generateMenu($items) {
    $html = '';
    $parent = 0;
    $parentStack = array();

    $children = array();
    foreach ($items as $item) {
        $children[$item['parent_id']][] = $item;
    }

    while (($option = each($children[$parent])) || ($parent > 0)) {
        if (!empty($option)) {
            // 1) Item with children
            if (!empty($children[$option['value']['id']])) {
                $html .= '<li>' . $option['value']['title'] . '</li>';
                $html .= '<ul>';
                array_push($parentStack, $parent);
                $parent = $option['value']['id'];
            }
            // 2) Item without children
            else {
                $html .= '<li>' . $option['value']['title'] . '</li>';
            }
        }
        // 3) Current parent has no more children
        else {
            $html .= '</ul>';
            $parent = array_pop($parentStack);
        }
    }

    return $html;
}</code>

用法

要使用该函数,首先从数据库中检索菜单项并将它们作为数组传递给generateMenu() 函数。生成的 HTML 将是一系列嵌套的无序列表,表示分层菜单结构。

非递归方法的好处

这种非递归方法消除了可能发生的无限循环的风险递归,使其成为生成嵌套菜单的更稳定、更高效的解决方案。

以上是如何使用 PHP 和 MySQL 构建无限嵌套菜单系统:非递归方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

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