0

0

php无限极分类数组怎么放_PHP无限极分类数组的存储

蓮花仙者

蓮花仙者

发布时间:2025-12-18 22:16:02

|

233人浏览过

|

来源于php中文网

原创

php无限极分类常用五种实现方式:一、递归构建嵌套数组;二、引用方式一次性构建;三、splfixedarray预分配空间;四、json路径字符串辅助存储;五、对象化节点模型存储。

php无限极分类数组怎么放_php无限极分类数组的存储

如果需要在PHP中实现无限极分类功能,通常需将具有父子关系的分类数据组织为嵌套数组结构。以下是几种常见的存储方式及其实现步骤:

一、递归构建嵌套数组

该方法通过递归遍历原始扁平数组,依据parent_id字段逐层查找子节点并组装为多维嵌套结构。适用于数据库查询结果为单层记录、含id和parent_id字段的场景。

1、定义一个空数组用于存放最终的树形结构。

2、编写递归函数,接收当前层级的父ID(初始为0或指定根ID)作为参数。

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

3、遍历原始数据,筛选出所有parent_id等于当前父ID的记录。

4、对每个匹配记录,将其添加到结果数组,并调用自身传入该记录的id作为新父ID。

5、将子节点数组赋值给当前节点的children键。

二、引用方式一次性构建

利用PHP变量引用特性,在单次循环中完成父子节点关联,避免重复遍历,性能优于递归法。要求原始数据已按id顺序排列或可索引访问。

1、创建一个空数组$tree用于保存根节点,另建一个引用数组$refs用于快速定位各节点。

2、遍历原始数据,为每条记录创建一个新数组,并将其同时存入$tree(当parent_id为0时)和$refs[id]中。

3、若当前记录的parent_id不为0,则将当前记录追加到$refs[parent_id]['children']中。

4、确保每条记录初始化时包含children键且值为空数组,防止后续追加失败。

三、使用SplFixedArray预分配空间

针对大数据量分类(如万级节点),可借助SplFixedArray提升内存效率与访问速度。适用于已知最大ID范围且ID连续性较高的情况。

XYCMS建站系统php版1.4
XYCMS建站系统php版1.4

XYCMS建站系统PHP版非MVC框架,自己手写原生态普通代码,作为企业用,已经绰绰有余。软件运行效率中等,加入数据缓存后性能提高。假如用来学习,下载可以慢慢研究的,假如用来建站,可以选择购买商业版就行建站用。栏目类别:文章,人员信息,专题项目,招聘,下载,相册,单页【支持无限极分类】文章:可用作添加新闻,资讯,列表信息类栏目信息人员信息:可用作企业员工信息栏目内容添加或者维护专题项目:可用作企业

下载

1、根据原始数据中最大id确定SplFixedArray长度,并初始化为null。

2、遍历原始数据,将每条记录以id为索引存入SplFixedArray中,并初始化其children属性为空数组。

3、再次遍历,对每个parent_id有效且存在的节点,将当前节点推入其父节点的children数组。

4、最后筛选出parent_id为0的节点作为根节点集合。

四、JSON路径字符串辅助存储

在数据库中额外维护一条path字段(如“0-1-5-12”),用于标识节点在树中的完整路径。PHP端据此快速排序与分层,适合读多写少场景。

1、查询时按path字段升序排序,保证父子相邻。

2、遍历排序后结果,根据path中分隔符数量判断当前层级深度。

3、使用结构动态维护当前路径上的父节点引用。

4、每次将新节点挂载到栈顶节点的children下,并根据深度调整栈长度。

五、对象化节点模型存储

定义Category类封装节点行为,每个实例持有id、name、parent_id及children属性,通过addChildren方法建立关系。增强可维护性与扩展性。

1、声明Category类,包含__construct、addChild、hasChildren等基础方法。

2、批量实例化原始数据为Category对象,并以id为键存入$objects数组。

3、再次遍历,若parent_id存在且对应对象已创建,则调用其addChild方法传入当前对象。

4、筛选出parent_id为null或0的对象作为根节点集合。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

442

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

322

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

244

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

766

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

553

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

216

2023.09.04

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

561

2026.02.13

热门下载

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

精品课程

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

共137课时 | 12.1万人学习

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

共6课时 | 11.2万人学习

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

共13课时 | 0.9万人学习

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

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