0

0

PHP递归实现菜单树_PHP利用递归构建多级菜单树形结构的代码

蓮花仙者

蓮花仙者

发布时间:2025-11-13 11:18:50

|

189人浏览过

|

来源于php中文网

原创

答案:通过父级ID递归构建树形菜单,利用引用优化性能,限制深度防溢出,并支持排序字段构造有序层级结构。

php递归实现菜单树_php利用递归构建多级菜单树形结构的代码

如果您需要在PHP中将扁平化的菜单数据构建成具有层级关系的树形结构,通常是因为数据库中的菜单表存储的是线性数据,但前端展示需要多级嵌套的结构。以下是几种使用递归实现菜单树的方法:

一、通过父级ID构建树形结构

该方法基于每个菜单项包含一个指向其父级的ID字段,通过递归查找每个节点的子节点来构建完整的树。

1、准备原始数据数组,确保每个元素包含id、parent_id、name等字段。

2、定义一个递归函数,接收所有菜单数据和当前父级ID作为参数。

立即学习PHP免费学习笔记(深入)”;

3、在函数内部遍历所有数据,筛选出parent_id等于当前传入父级ID的项目。

4、对每一个匹配的项目,递归调用该函数,查找其子项目,并将其赋值给children属性。

5、返回最终形成的树形结构数组。

注意:初始调用时传入parent_id为0或null,表示根节点

二、使用引用方式优化性能

此方法利用PHP的引用机制,在构建过程中避免重复遍历整个数组,提高处理大数据量时的效率。

1、先将所有菜单项以id为键存入一个关联数组,便于快速访问。

2、创建一个空数组用于存放树形结构结果。

3、遍历所有菜单项,使用引用将其挂载到对应父级的children下。

4、若某项的parent_id为0或不存在,则将其加入结果数组作为根节点。

5、通过引用关系自动形成嵌套结构,无需显式递归调用。

DreamGen
DreamGen

一个AI驱动的角色扮演和故事写作的平台

下载

优势在于时间复杂度接近O(n),适合大型菜单系统

三、限制递归深度防止溢出

当菜单层级过深时,普通递归可能导致PHP调用栈溢出,因此需设置深度限制来保障程序稳定。

1、在递归函数中添加一个表示当前层级的参数,默认从0开始。

2、设定最大允许层级数(如5层),每次递归前判断是否超过该值。

3、若超过最大层级,则停止继续向下查找子节点,并可选择记录警告信息。

4、返回当前已构建的部分树结构。

建议在实际应用中设置depth字段进行数据库层面控制

四、支持排序字段的递归构造

在构建树时,往往需要根据某个排序字段(如sort_order)对同级菜单进行排序。

1、在递归函数中,对每一层的子节点数组使用usort进行自定义排序。

2、排序规则依据数据中的权重或顺序字段进行升序或降序排列

3、确保在生成children之前完成排序操作。

4、递归处理每个已排序后的子节点。

保持菜单显示顺序与后台配置一致,提升用户体验

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2021

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1343

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1249

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1402

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1231

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1440

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

74

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.2万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号