配置php递归函数实现树形结构_通过php递归函数生成树形菜单

使用PHP递归函数可将数据库中的层级数据构造成树形结构,适用于多级菜单等场景;通过buildTree函数从根节点(parent_id=0)开始递归查找子节点,形成嵌套数组,再用renderMenu函数生成HTML列表,实现前端展示;该方法简单易用,适合一般Web开发需求。

配置php递归函数实现树形结构_通过php递归函数生成树形菜单

在Web开发中,树形结构常用于生成多级菜单、分类目录或组织架构图。PHP递归函数是处理这类层级数据的有效方式,尤其当数据存储在数据库中且通过父ID(parent_id)关联时。

理解树形结构的数据模型

通常,树形数据存储在一个数据表中,字段包括idname(或title)、parent_id。其中,parent_id = 0 表示该节点为根节点。

例如:

id | name     | parent_id1  | 家电     | 02  | 手机     | 03  | 电视     | 14  | 冰箱     | 15  | 智能手机 | 26  | 曲面电视 | 3

目标是将这些数据构造成嵌套的树形结构,便于前端展示为多级菜单。

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

构建递归函数生成树形数组

递归的核心思想是:从根节点开始,查找其所有子节点,并对每个子节点再次调用自身函数,直到没有子节点为止。

以下是一个典型的递归函数实现:

function buildTree($data, $parentId = 0) {    $tree = [];    foreach ($data as $item) {        if ($item['parent_id'] == $parentId) {            $children = buildTree($data, $item['id']);            if ($children) {                $item['children'] = $children;            }            $tree[] = $item;        }    }    return $tree;}

说明:

$data 是从数据库取出的扁平化数组 函数遍历所有数据,筛选出 parent_id 匹配当前父ID的节点 对每个匹配节点递归调用 buildTree,查找其子节点 如果存在子节点,则添加 ‘children’ 键存储子树

使用示例与输出结果

假设从数据库获取数据后存为数组:

$data = [    ['id' => 1, 'name' => '家电', 'parent_id' => 0],    ['id' => 2, 'name' => '手机', 'parent_id' => 0],    ['id' => 3, 'name' => '电视', 'parent_id' => 1],    ['id' => 4, 'name' => '冰箱', 'parent_id' => 1],    ['id' => 5, 'name' => '智能手机', 'parent_id' => 2],    ['id' => 6, 'name' => '曲面电视', 'parent_id' => 3],];$tree = buildTree($data);print_r($tree);

输出结果将是嵌套的树形结构,清晰表达层级关系。

前端展示树形菜单(HTML + 递归输出)

可以再写一个递归函数将树形数组输出为HTML列表:

function renderMenu($tree) {    if (empty($tree)) return '';    $html = '
    '; foreach ($tree as $item) { $html .= '
  • ' . htmlspecialchars($item['name']); if (!empty($item['children'])) { $html .= renderMenu($item['children']); } $html .= '
  • '; } $html .= '
'; return $html;}echo renderMenu($tree);

这样就能在页面上生成一个多级可展开的菜单结构。

基本上就这些。递归函数虽然简洁,但要注意数据量过大时可能引发性能问题。对于深层级或大数据量场景,可考虑使用“嵌套集模型”或“路径枚举”等优化方案。不过对于一般菜单系统,递归方法足够实用且易于理解。

以上就是配置php递归函数实现树形结构_通过php递归函数生成树形菜单的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1322554.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
将Laravel扁平化目录路径转换为多层级树形结构教程
上一篇 2025年12月12日 08:41:54
PHP多维关联数组转换为HTML表格的教程
下一篇 2025年12月12日 08:42:09

相关推荐

  • 为什么VSCode的CSS代码提示不全?

    答案:VSCode CSS提示不全通常由配置或环境问题导致。1. 确保文件语言模式为CSS并正确关联扩展名;2. 更新VSCode以支持现代CSS特性,自定义属性需插件辅助;3. 安装IntelliSense、Tailwind或PostCSS等插件增强提示功能;4. 检查settings.json中…

    2026年9月20日
    000
  • 日本市场哪家手机卖更好?小米暴涨位列第三

    不知道大家平时是否关注海外国家 / 地区的智能手机市场?以日本市场为例,除了苹果和三星外,其它基本都是日本本土厂商,中国国产厂商很少发展起来,但现据小米官方消息,上个季度小米已经跻身 top5,并且拿下了不少份额。 如上图所见,小米日本官方账号在 X 平台分享了上个季度的成绩,引用了市场研究机构 C…

    2026年9月20日
    100
  • 怎么在VSCode里运行HTML文件?

    使用Live Server扩展是VSCode运行HTML文件最简单的方法,安装后右键选择“Open with Live Server”即可在浏览器中自动打开并实时预览网页内容。 在VSCode里运行HTML文件,最简单的方法是借助浏览器打开。VSCode本身不直接运行HTML,但可以快速预览和调试。…

    2026年9月20日
    000
  • PHP框架依赖管理工具选哪个_PHP框架依赖管理工具对比

    Composer是PHP依赖管理的首选工具,通过composer.json定义依赖、自动安装包并处理版本冲突,支持主流框架、拥有丰富生态和自动加载机制,尽管存在学习曲线和潜在依赖冲突,但其优势远超其他方案。 PHP框架依赖管理,其实就是选一个靠谱的工具来帮你自动搞定项目里各种代码包的安装、更新和卸载…

    2026年9月20日
    000
  • qq浏览器怎么导出已保存的账号密码_qq浏览器密码导出教程

    1、通过Windows凭据管理器可查看QQ浏览器保存的密码,进入控制面板的“凭据管理器”→“Web凭据”,点击条目并验证系统密码后显示明文信息。2、在QQ浏览器设置中进入“密码管理”→“已保存的密码”,身份验证后逐条查看账号密码并手动记录。3、利用开发者工具修改登录页密码框属性,将type=&#82…

    2026年9月20日
    000
  • UC浏览器如何给书签文件夹加密_UC浏览器书签文件夹加密方法

    1、UC浏览器可通过隐私锁功能加密书签文件夹,设置图案、密码或指纹验证;2、若无内置加密,可导出书签为HTML文件并用Keepass等加密应用管理;3、还可利用手机隐私空间功能,将UC浏览器迁移至隔离环境实现系统级保护。 如果您希望在使用UC浏览器时保护个人隐私,防止他人随意查看您收藏的重要网页,可…

    2026年9月20日
    100
  • 李杰坦言一加15做165Hz+1.5K太难了:面临5大技术难题

    10月15日,一加中国区总裁李杰透露,尽管165hz刷新率能显著提升视觉与操作流畅度已是行业共识,但为何多年来智能手机屏幕始终停留在120hz?其背后原因并不简单。 根本症结在于技术门槛极高。在“第三代东方屏”问世之前,支持165Hz的手机屏幕最高仅能实现1080P分辨率,这背后长期被五大技术瓶颈所…

    2026年9月20日
    000
  • 百度AI如何提升企业运营效率_百度AI企业运营效率提升策略

    通过引入百度AI技术优化企业运营,1. 部署智能电话客服系统,利用语音识别与UNIT技术实现自动应答;2. 实施智能语音质检,将通话转文本并分析情绪与风险;3. 启用人脸识别考勤,提升安全性与效率;4. 构建OCR单据识别体系,实现信息自动录入,全面提升电销、客服与办公协同效率。 ☞☞☞AI 智能聊…

    2026年9月20日
    100
  • B站官方网站视频_B站视频网站主页官网

    B站官方网站视频观看入口地址是https://www.bilibili.com,平台集成了动画、影视、科技等多领域内容分区,支持自定义画质调节与实时弹幕互动,配备个性化推荐算法,优化网页端与客户端操作体验,提供跨设备观看记录同步及技术兼容性解决方案,确保稳定流畅的视频播放。 B站官方网站视频观看入口…

    2026年9月20日
    000
  • Google最新版官方网址 Google平台主页直达官方链接

    Google最新版官方网址是www.google.com,提供精准搜索、多语言支持及跨设备同步等功能,集成图片、新闻等资源,并持续优化算法与安全机制。 Google最新版官方网址在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来Google平台主页直达官方链接,感兴趣的网友一起随小编来瞧瞧吧…

    2026年9月20日
    000
  • Linux如何将进程放入后台运行

    将Linux进程放入后台运行主要有四种方法:使用&符号在启动时放入后台;通过Ctrl+Z暂停后用bg继续运行;结合nohup与&防止会话关闭导致终止;使用screen或tm…

    2026年9月20日
    000
  • edge浏览器无法打开本地HTML文件或显示空白怎么办_Edge浏览器打开本地HTML文件失败解决方法

    1、检查文件路径并选择Edge打开,确保路径为纯英文;2、在edge://flags中启用“Allow file access from files”;3、使用开发者工具排查资源加载错误;4、通过命令行启动Edge绕过安全限制;5、推荐使用npx live-server搭建本地服务器运行HTML文件…

    2026年9月20日
    000
  • Grok官方主页访问_Grok官方网站网页版链接

    Grok官方网站网页版链接是https://grok.com,用户无需X账户即可通过浏览器访问,支持多语言和多设备使用,并可实时检索信息、进行多轮对话及内容生成。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ Grok官方网站网页版链接在哪…

    2026年9月20日
    100
  • mysql如何优化日期查询

    正确使用索引和避免函数干扰是MySQL日期查询优化的核心。1. 为日期字段添加索引,确保范围查询高效执行;2. 避免在WHERE条件中对日期字段使用DATE()、YEAR()等函数,改用范围比较;3. 用order_date >= ‘2024-01-01’ AND or…

    2026年9月20日
    100
  • CodeIgniter 4 API:捕获并返回错误到HTTP响应

    本文旨在帮助开发者在使用CodeIgniter 4 构建API时,能够有效地捕获后端发生的错误,并将这些错误信息以HTTP响应的形式返回给客户端,从而避免每次都检查日志文件的繁琐过程,提升开发效率。 在CodeIgniter 4中,默认情况下,错误会被记录到日志文件中,但不会直接显示在HTTP响应中…

    2026年9月20日
    000
  • Linux输出文本echo命令应用

    echo命令不仅能输出文本,还可结合变量、转义序列和重定向实现动态内容生成、文件创建与追加、配置修改、管道处理及脚本调试,其行为在Bash、Zsh和Dash等shell中因内置实现不同而存在差异,尤其在转义序列处理上需注意使用-e选项或改用printf以保证一致性。 echo 命令在 Linux 中…

    2026年9月20日
    000
  • 如何为VSCode配置一个自定义的文件编码检测策略?

    VSCode无直接自定义编码检测API,需通过files.encoding设默认编码,files.autoGuessEncoding启自动识别,files.associations按文件类型指定编码,.editorconfig统一项目规范,辅以扩展处理特殊需求,组合实现自定义策略;编码误判主因包括B…

    2026年9月20日
    000
  • 怎样在VSCode中为不同文件类型设置不同的缩进?

    在VSCode中可为不同文件类型设置缩进,通过settings.json按语言ID配置,如Python用4空格、HTML用2空格,保存后自动生效并覆盖全局设置。 在 VSCode 中为不同文件类型设置不同的缩进,可以通过配置语言特定的设置来实现。VSCode 支持按语言 ID 覆盖编辑器的缩进行为,…

    2026年9月20日
    100
  • 豆包Ai官方网页版访问_豆包Ai网页版使用官网

    豆包Ai官方网页版访问入口为https://www.doubao.com/chat/,支持智能聊天、图像生成、文档互动等功能,用户可通过网页、客户端或移动端使用,建议登录账号并分步提问以提升交互效率。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型…

    2026年9月20日
    000
  • mysql如何设计审计表

    设计MySQL审计表需明确审计范围,优先针对核心业务表实施行级、操作行为及DDL变更审计。采用通用结构audit_log表,以JSON字段存储新旧值,记录操作类型、时间、操作者等关键信息,并建立索引提升查询效率。通过触发器自动捕获数据变更,结合应用层传递真实用户身份与客户端信息,实现完整审计链路。1…

    2026年9月20日
    000

发表回复

登录后才能评论
关注微信