”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何使用递归从具有父类别的数据库生成嵌套菜单树?

如何使用递归从具有父类别的数据库生成嵌套菜单树?

发布于2024-11-07
浏览:909

How can recursion be used to generate a nested menu tree from a database with parent categories?

菜单树生成的递归

在您的情况下,您有一个数据库结构,其中类别有一个“根”字段指示其父类别。您想要的 HTML 输出涉及表示类别层次结构的嵌套列表。为此,可以使用递归 PHP 函数。

这是一个示例函数:

function recurse($categories, $parent = null, $level = 0) {
    $ret = '
    '; foreach ($categories as $index => $category) { if ($category['root'] == $parent) { $ret .= '
  • ' . $category['name'] . '

    '; $ret .= $this->recurse($categories, $category['id'], $level 1); $ret .= '
  • '; } } return $ret . '
'; }

此函数假设根类别有一个值为空值的“根”字段。它遍历类别,根据“根”字段识别子类别,并使用嵌套列表构建 HTML。

要使用此函数:

  1. 在数据库中查询多维类别数组。
  2. 以类别数组和 null 作为父参数调用递归函数。
  3. 将返回值分配给变量(例如 $Tree)。
  4. 回显 $Tree 变量以显示嵌套菜单树。

或者,您可以修改函数以避免空列表,方法是在创建列表之前检查类别是否有子类别:

function recurse($categories, $parent = null, $level = 0) {
    $ret = '
    '; foreach ($categories as $index => $category) { if ($category['root'] == $parent) { $ret .= '
  • ' . $category['name'] . '

    '; $sub = $this->recurse($categories, $category['id'], $level 1); if ($sub != '
      ') { $ret .= $sub; } $ret .= '
    • '; } } return $ret . '
    '; }

    此修改后的函数仅在类别至少有一个子类别时才会创建列表。

    最新教程 更多>
    • 为什么尽管有效代码,为什么在PHP中捕获输入?
      为什么尽管有效代码,为什么在PHP中捕获输入?
      在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
      编程 发布于2025-05-23
    • 如何处理PHP文件系统功能中的UTF-8文件名?
      如何处理PHP文件系统功能中的UTF-8文件名?
      在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
      编程 发布于2025-05-23
    • 如何在JavaScript对象中动态设置键?
      如何在JavaScript对象中动态设置键?
      在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
      编程 发布于2025-05-23
    • 如何使用PHP从XML文件中有效地检索属性值?
      如何使用PHP从XML文件中有效地检索属性值?
      从php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
      编程 发布于2025-05-23
    • 编译器报错“usr/bin/ld: cannot find -l”解决方法
      编译器报错“usr/bin/ld: cannot find -l”解决方法
      错误:“ usr/bin/ld:找不到-l “ 此错误表明链接器在链接您的可执行文件时无法找到指定的库。为了解决此问题,我们将深入研究如何指定库路径并将链接引导到正确位置的详细信息。添加库搜索路径的一个可能的原因是,此错误是您的makefile中缺少库搜索路径。要解决它,您可以在链接器命令中添加...
      编程 发布于2025-05-23
    • 在GO中构造SQL查询时,如何安全地加入文本和值?
      在GO中构造SQL查询时,如何安全地加入文本和值?
      在go中构造文本sql查询时,在go sql queries 中,在使用conting and contement和contement consem per时,尤其是在使用integer per当per当per时,per per per当per. [&​​&&&&&&&&&&&&&&&默元组方法在...
      编程 发布于2025-05-23
    • PHP未来:适应与创新
      PHP未来:适应与创新
      PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。 引言在编程世界中,PHP一直是网页开发的中流砥柱。作为一个从1994年就开始发展...
      编程 发布于2025-05-23
    • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
      为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
      使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 考虑文档中给出的示例:这是内部发生的事情: 现在在3月3日添加另一个月,因为2月在2001年只有2...
      编程 发布于2025-05-23
    • Java中如何使用观察者模式实现自定义事件?
      Java中如何使用观察者模式实现自定义事件?
      在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
      编程 发布于2025-05-23
    • 如何从Google API中检索最新的jQuery库?
      如何从Google API中检索最新的jQuery库?
      从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
      编程 发布于2025-05-23
    • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
      您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
      在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
      编程 发布于2025-05-23
    • 在Pandas中如何将年份和季度列合并为一个周期列?
      在Pandas中如何将年份和季度列合并为一个周期列?
      pandas data frame thing commans date lay neal and pree pree'和pree pree pree”,季度 2000 q2 这个目标是通过组合“年度”和“季度”列来创建一个新列,以获取以下结果: [python中的concate...
      编程 发布于2025-05-23
    • 如何从PHP中的数组中提取随机元素?
      如何从PHP中的数组中提取随机元素?
      从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
      编程 发布于2025-05-23
    • Java字符串非空且非null的有效检查方法
      Java字符串非空且非null的有效检查方法
      检查字符串是否不是null而不是空的if (str != null && !str.isEmpty())Option 2: str.length() == 0For Java versions prior to 1.6, str.length() == 0 can be二手: if(str!= n...
      编程 发布于2025-05-23
    • 如何检查对象是否具有Python中的特定属性?
      如何检查对象是否具有Python中的特定属性?
      方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
      编程 发布于2025-05-23

    免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

    Copyright© 2022 湘ICP备2022001581号-3