首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PHP实现无限极分类生成分类树的方法

PHP实现无限极分类生成分类树的方法

作者头像
用户2323866
修改于 2021-07-06 02:57:47
修改于 2021-07-06 02:57:47
1.2K0
举报
文章被收录于专栏:技术派技术派

本文实例讲述了PHP实现无限极分类生成分类树的方法。分享给大家供大家参考,具体如下: 现在的分类数据库设计基本都是:每一个分类有一个id主键字段,一个pid指向父类的id,这样便可实现无限级分类,取出的数据就是如下的格式:

代码语言:javascript
AI代码解释
复制
$arr = array(
array("id" => 1 , "pid" => 0 , 'cat' => '栏目一'),
array("id" => 2 , "pid" => 0 , 'cat' => '栏目二'),
array("id" => 3 , "pid" => 1 , 'cat' => '栏目三'),
array("id" => 4 , "pid" => 2 , 'cat' => '栏目四'),
array("id" => 5 , "pid" => 1 , 'cat' => '栏目五'),
array("id" => 6 , "pid" => 5 , 'cat' => '栏目六'),
array("id" => 7 , "pid" => 5 , 'cat' => '栏目七'),
array("id" => 8 , "pid" => 6 , 'cat' => '栏目八'),
array("id" => 9 , "pid" => 1 , 'cat' => '栏目九'),
array("id" => 10 , "pid" => 0 , 'cat' => '栏目十'),
array("id" => 11 , "pid" => 10 , 'cat' => '栏目十一'),
array("id" => 12 , "pid" => 11 , 'cat' => '栏目十二'),
array("id" => 13 , "pid" => 2 , 'cat' => '栏目十三'),
array("id" => 14, "pid" => 13 , 'cat' => '栏目十四')
);

不多说,直接上处理代码:

代码语言:javascript
AI代码解释
复制
//生成无限极分类树
function make_tree($arr){
$refer = array();
$tree = array();
foreach($arr as $k => $v){
$refer[$v['id']] = & $arr[$k]; //创建主键的数组引用
}
foreach($arr as $k => $v){
$pid = $v['pid']; //获取当前分类的父级id
if($pid == 0){
$tree[] = & $arr[$k]; //顶级栏目
}else{
if(isset($refer[$pid])){
$refer[$pid]['subcat'][] = & $arr[$k]; //如果存在父级栏目,则添加进父级栏目的子栏目数组中
}
}
}
return $tree;
}

测试运行:

$cat = make_tree($arr); print_r($cat);

运行结果:

Array ( [0] => Array ( [id] => 1 [pid] => 0 [cat] => 栏目一 [subcat] => Array ( [0] => Array ( [id] => 3 [pid] => 1 [cat] => 栏目三 ) [1] => Array ( [id] => 5 [pid] => 1 [cat] => 栏目五 [subcat] => Array ( [0] => Array ( [id] => 6 [pid] => 5 [cat] => 栏目六 [subcat] => Array ( [0] => Array ( [id] => 8 [pid] => 6 [cat] => 栏目八 ) ) ) [1] => Array ( [id] => 7 [pid] => 5 [cat] => 栏目七 ) ) ) [2] => Array ( [id] => 9 [pid] => 1 [cat] => 栏目九 ) ) ) [1] => Array ( [id] => 2 [pid] => 0 [cat] => 栏目二 [subcat] => Array ( [0] => Array ( [id] => 4 [pid] => 2 [cat] => 栏目四 ) [1] => Array ( [id] => 13 [pid] => 2 [cat] => 栏目十三 [subcat] => Array ( [0] => Array ( [id] => 14 [pid] =>/【本文中一些MYSQL版本可能是以前的,MYSQL建议使用5.7以上的版本】/; 13 [cat] => 栏目十四 ) ) ) ) ) [2] => Array ( [id] => 10 [pid] => 0 [cat] => 栏目十 [subcat] => Array ( [0] => Array ( [id] => 11 [p//id] => 10 [cat] => 栏目十一 [subcat] => Array ( [0] => Array ( [id] => 12 [pid] => 11 [cat] => 栏目十二 ) ) ) ) ) )

如果大家需要这样的组装格式,或者需要该格式方便后续的处理,可以尝试此方法

希望本文所述对大家PHP程序设计有所帮助。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PHP实现无限极分类
导读:说到无限极分类,这个在程序中是常见的一个功能点了。实现的方式也有很多种,今天着重分享一下涉及到数据库的无线分类,可以使用递归处理,也可以使用循环查询数据库处理。但是我们考虑到数据库的性能问题,都不建议采用循环查库。都是直接设计好数据表,直接查库,通过代码层实现。 1.我们实现准备好数据表,代码结构如下。 CREATE TABLE `bg_cate` ( `cate_Id` int(30) unsigned NOT NULL AUTO_INCREMENT, `cate_ParentId` int(3
兔云小新LM
2019/07/24
1.5K0
Laravel 框架实现无限极分类
近开发商品功能,在尝试递归和引用方式后,蓦然回首,突然发现 laravel 框架有更简单高效的实现方式,无限极分类最佳实践,open code 与大家共享!感兴趣的 Mark 一下,谢谢~
ITer.996
2020/07/22
1.8K0
php原生:无限极分类
解释核心:顶级分类0下面可以有无限个子类。这就叫无限极分类。简介来说就是中国:大的范围下<<<所属>>>的小范围:海南吧。
贵哥的编程之路
2021/12/07
1.2K0
php原生:无限极分类
周而复始,往复循环,递归、尾递归算法与无限极层级结构的探究和使用(Golang1.18)
    所有人都听过这样一个歌谣:从前有座山,山里有座庙,庙里有个和尚在讲故事:从前有座山。。。。,虽然这个歌谣并没有一个递归边界条件跳出循环,但无疑地,这是递归算法最朴素的落地实现,本次我们使用Golang1.18回溯递归与迭代算法的落地场景应用。
用户9127725
2022/12/22
1.5K0
周而复始,往复循环,递归、尾递归算法与无限极层级结构的探究和使用(Golang1.18)
PHP 无限级分类数据库设计及实现
♖背景 最近复习算法,在此对无限级分类的实现方法稍作整理,当然也是参考了道友的经验,目测适合实际的项目应用,当然,也有不少公司的笔试题还会涉及到呢,有何问题,欢迎各位道友指摘 … 操作环境:Win10 使用语言:PHP 使用框架:ThinkPHP 3.2.3 ♘前期准备 ①. 首先,实现无限级分类的方式有: 以父ID设计,运用递归实现的方式 以全路径实现的无限分类方式 ②. 其次,数据表设计思路 对应于上述的两种实现方式,那么在数据表设计时也可以有两种方式,参考所给的数据表截图 如
泥豆芽儿 MT
2018/10/15
2.4K0
PHP使用递归算法查找子集获取无限极分类等实操
递归函数是我们常用到的一类函数,最基本的特点是在函数或子过程的内部,直接或者间接地调用自己的算法,但必须在调用自身前有条件判断,否则无限调用下去,也就是所谓的死循环
沈唁
2018/08/21
2.1K0
PHP使用递归算法查找子集获取无限极分类等实操
tp6中无限极分类里面的获取多级分类数据
就是很多很多的数据,按照无限极分类结构排序。每一个数组的所有数据都是顶级分类及其其下数据
贵哥的编程之路
2022/06/05
1.2K0
tp6中无限极分类里面的获取多级分类数据
无限分类之子孙树与家谱树实现
无限分类在日常开发中很常见至少对于PHP程序员来说,如网站常见的商品分类、面包屑、省市联动、新闻分类等等,一个栏目又包含很多个子栏目子栏目又包含很多子栏目...。 这里介绍无限分类的子孙树与家谱树实现。
切图仔
2022/09/14
6660
对无限级分类数据进行重新排序(非树形结构)
无限级分类查询有很多方式。本文记录的方式是先将所有数据查出来,再使用递归对数据进行排序,并附加层级字段(level)。此方式仅仅对无限级的数据进行排序,并没有将子级内容放入父级。 1. 先看效果图
很酷的站长
2023/02/17
2K0
对无限级分类数据进行重新排序(非树形结构)
tp6无限极分类地址值查询(提供sql每一步都var_dump();了
第一步:把无限极分类里面的数据变成二维数组。二维数组的下标是每一条数据的id 第二步:为什么需要引用传递,而不用值传递。因为如果你想变化原来的值的话,就用引用传递吧。值传递不能的哦
贵哥的编程之路
2022/05/25
3740
tp6无限极分类地址值查询(提供sql每一步都var_dump();了
PHP实现无限级分类 -- Path标识
在实际项目中经常要用到无限级分类,如多级分类、导航表等。PHP 实现无限级分类通常有两种实现方式,一种是利用path字段(pid+id)标识当前层级;另一种是利用递归循环pid的方式。此处介绍前种方式。
程序小工
2018/09/12
2.4K0
PHP无限分类[增强版]
<?php /** +------------------------------------------------ 通用的树型类 +------------------------------
用户7108768
2021/09/22
1.8K0
PHP无限级分类函数封装与应用
下面的讲解我用的是ThinkPHP框架,与PHP用法是一样的。 Step 1、数据表中主要字段是id、parent_id Step 2、SQL语句: SELECT * FROM `t_class` W
Sindsun
2018/04/28
1.8K0
PHP无限级分类函数封装与应用
tp6无限极分类的查询
递归就是先查找顶级分类,然后通过递归查找其顶级分类下的子类。 如果有第二个顶级分类的话,他会先unset( [k])先删除已经遍历过的,就能得到第二个顶级分类
贵哥的编程之路
2022/05/24
1.2K0
tp6无限极分类的查询
使用Python3.7+Django2.0.4配合vue.js2.0的组件递归来实现无限级分类(递归层级结构)
    所谓的无限极分类是啥?其实简单点说就是一个人类可以繁衍出多个后代,然后一个后代又可以分另外多个后代这样无限繁衍下去(可以想象神奇动物在哪里2里面莱斯特兰奇的家族族谱),就好象linux系统你可以新建一个文件夹,然后在这个文件夹里又可以建一些个文件夹,在文件夹底下还可以建一些文件夹一样,随后使用tree命令就可以查看文件夹目录层级。
用户9127725
2022/08/08
7970
使用Python3.7+Django2.0.4配合vue.js2.0的组件递归来实现无限级分类(递归层级结构)
php递归算法-无限极分类
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169571.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
8860
相关推荐
PHP实现无限极分类
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档