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

如果需要在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提升内存效率与访问速度。适用于已知最大ID范围且ID连续性较高的情况。
1、根据原始数据中最大id确定SplFixedArray长度,并初始化为null。
XYCMS建站系统PHP版非MVC框架,自己手写原生态普通代码,作为企业用,已经绰绰有余。软件运行效率中等,加入数据缓存后性能提高。假如用来学习,下载可以慢慢研究的,假如用来建站,可以选择购买商业版就行建站用。栏目类别:文章,人员信息,专题项目,招聘,下载,相册,单页【支持无限极分类】文章:可用作添加新闻,资讯,列表信息类栏目信息人员信息:可用作企业员工信息栏目内容添加或者维护专题项目:可用作企业
0
2、遍历原始数据,将每条记录以id为索引存入SplFixedArray中,并初始化其children属性为空数组。
3、再次遍历,对每个parent_id有效且存在的节点,将当前节点推入其父节点的children数组。
4、最后筛选出parent_id为0的节点作为根节点集合。
在数据库中额外维护一条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的对象作为根节点集合。
以上就是php无限极分类数组怎么放_PHP无限极分类数组的存储的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号