无限级分类的原理(递归方法)
在web开发当中,我们经常会遇到无限级分类,既中国有北京、天津、河北、河南等省(自治区、直辖市),河北有石家庄、张家口、唐山等地级市,石家庄又有正定县、无极县,正定县又有。。。。
实现这种无限级分类,我们只需要在字段中增加一个pid,用于记录父类的id,这时候我们就可以采用递归的方式得到最终的结果,这里面有两种处理方式,一种是得到一个二维数组,一种是得到一个多维数组。具体代码如下:
/*由父类得到全部子类,得到一个二维数组*/function getChildren2($list,$pid=0){static $arr = array();foreach ($list as $key => $value) {if ($value['pid']==$pid) {$arr[] = $value;getChildren2($list,$value['id']);}} return $arr;
}
function getChildren($list,$pid=0){$arr = array();foreach ($list as $key => $value) {if ($value['pid']==$pid) {$value['children']=getChildren($list,$value['id']);$arr[] = $value;}} return $arr;
}
两者实现的代码都比较简单,但因为涉及到了递归,好多人就看不懂代码了,本文就通过举例子的方式,带领大家一步步分析一下代码的原理。(A表示遍历的第一层,B表示遍历的第二层,B1表示第二层的第一次遍历,C2表示第三层的第二次遍历),建议大家边看边拿出张纸画一下。
先是进行遍历(A层),找到pid为0,也就是最高一级的分类,假如我们找到了北京(id=1),这时候我们就进入了递归,搜索条件pid=0也就变成了pid=1,既找到北京全部的子类。
再次遍历(B1层),找到一个名为海淀(id=8)的数据,它的pid为1,符合条件,是北京的子类,这时候我们再次进入递归,搜索条件pid=1也就变成了pid=8,既找到海淀全部的子类。
再次遍历(C1层),找到一个名为中关村(id=15)的数据,它的pid为8,符合条件,是海淀的子类,这时候我们再次进入递归,搜索条件pid=8也就变成了pid=15,既找到中关村全部的子类。
再次遍历(D1层),发现没有数据的pid是15,也就是中关村没有子类,那么本层遍历结束,继续进行C1层的遍历(既找pid为8的数据),找到一个名为魏公村(id=20)的数据,它的pid是8,符合条件,是海淀的子类,这时候再次进入递归,搜索条件pid=15也就变成了pid=20,既找到魏公村全部的子类。
再次遍历(D2层),发现没有数据的pid是20,也就是魏公村没有子类,那么本层遍历结束,继续进行C1层的遍历。
遍历C1层,发现没有pid为8的数据了,那么本层(C1)遍历结束,继续回到B1层进行遍历。
遍历B1层,发现数据朝阳(id=9),它的pid为1,符合条件,是北京的子类,这时候我们再次进入递归,搜索条件pid=1也就变成了pid=9,既找到朝阳全部的子类。
遍历C2层,发现没有数据符合条件,退回到B1层。
继续遍历B1层,发现没有数据符合pid=1,既北京的子类已经全部找到了,那么退回到A层。
继续遍历A层,发现河北(id=19)的pid为0,符合条件,这时候我们就进入了递归,搜索条件pid=0也就变成了pid=19,既找到河北全部的子类。
遍历B2层。。。。。。。。。。。。。。
id name pid
1 北京 0
8 海淀 1
9 朝阳 1
15 中关村 8
19 河北 0
20 魏公村 8
以上是例子当中的部分数据,注意这个顺序是可以随意打乱的,只要你的pid正确就能得到最终的结果。
如果感觉看的比较乱套,还是一点拿出纸和笔,自己列一些数据,按照代码的流程自己写一下,其实很容易理解的。
无限级分类的原理(递归方法)相关推荐
- php无限分类原理,php 递归无限级分类原理和实现代码
递归无限级分类的原理: 每一个分类都记录它的父级id,当为顶级分类时,父级id为0.这样无论哪个分类,都可以通过父级id一层一层去查明它的所有父级,以便清楚知道它所属何种分类,层级深度为几. 对数据进 ...
- php查找顶级分类,php 无限级分类 获取顶级分类ID,php顶级_PHP教程
php 无限级分类 获取顶级分类ID,php顶级 有这样一个表,id是分类的ID,name是分类名称,pid是上级分类的ID. 现在有个分类ID,程序要找到它上级的上级的上级--分类的ID,简单说就是 ...
- 一道无限级分类题的 PHP 实现
今天有网友出了道题: 给出如下的父子结构(你可以用你所用语言的类似结构来描述,第一列是父,第二列是子),将其梳理成类似如图的层次父子结构. origin = [('A112', 'A1122'),(' ...
- 运用无限级分类管理数据库原理详解
在做网站开发的过程中需要运用无限极分类管理数据库中的数据.但是无限级分类的原理是什么呢?总结一下吧. 无限极分类就是子节点是父节点分叉产生的. 具体实现后续跟进,这里先总结原理! 以2叉树为例: 1. ...
- php实现无限级分类(递归方法)
什么是无限级分类? 无限级分类是一种分类技巧,例如部门组织,文章分类,学科分类等常用到无限级分类, 将其简单理解成分类就好了.其实我们仔细想一下,生活中的分类简直太多了, 衣服可以分为男装和女装,也可 ...
- php无极分类非递归_php实现无限级分类(递归方法)
相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径.各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了. 到网上一搜php无限极分类,很多 ...
- 无限级分类实现思路 (组织树的分级管理)
2019独角兽企业重金招聘Python工程师标准>>> 关于该问题,暂时自己还没有深入研究,在网上找到几种解决方案,各有优缺点. 第一种方案: 使用递归算法,也是使用频率最多的,大部 ...
- php如何对 mysql 中text类型拆分存入一个数组_PHP递归实现无限级分类,可选返回字符串和数组...
正 文: 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 递归,简单的说就是 ...
- 帖子回复——无限级分类
若是QQ空间那种,这里无需再使用无限级分类. 而是帖子之下的评论回复使用字段标记分清从属后按时间排序就行 //根据回复评论表,查询出回复人和被回复人信息 select acrr.id,comment_ ...
最新文章
- 关注书籍和教程(更新中)
- 输出1/n(是循环小数的,只输出第一个循环节)
- php特性介绍(贼有用)
- python自带gui_Python GUI开发工具中五种类型的相关介绍
- SAP ABAP XSLT extract custom style
- .NET Windows服务应用程序
- RabbitMQ安装和使用(和Spring集成)
- Muduo 网络编程示例之三:定时器
- 新装的电脑执行maven install命令一直报Could not find artifact jdk.tools:jdk.tools:jar:1.7
- 重装的电脑360打补丁都是智能忽略
- 线性/非线性规划问题求解
- devexpress控件使用笔记
- linux后加网卡,Linux添加网卡教程
- PDF文件不能编辑,有什么办法能够解决?
- 如何刷PTA,达到PTA甲级、乙级、顶级应具备的能力
- Draw.io--一款强大且支持在线编辑和导出的流程图绘制软件
- 用Python和OpenCV库实现识别人物出现并锁定
- 服务器PCI插槽上的固态硬盘,SSD接口详解,再也不会买错固态硬盘了
- 技术面试问题汇总第004篇:猎豹移动反病毒工程师part4
- Makefile之subst 函数