原始数据

  • 数据库
  • 打印到页面

递归

  • 递归的思路就是【找儿子】,也就是循环所有数据,找到每条数据的所有儿子、儿子的儿子、儿子的儿子的儿子…,首先我们知道要找test1的儿子就是找所有pid为1的数据,于是遍历整个数组找到了test1-1和test1-2;然后还要分别找test1-1和test1-2的儿子,就这样一直找下去,由于每次找儿子的方法都是一样的,就是遍历所有数据(除开自己的长辈,因为长辈不可能是儿孙),找出符合条件的,唯一不同的就是每次找儿子的爹不一样,代码如下:
function getChild($data, $id = 0){//初始化儿子$child = [];//循环所有数据找$id的儿子foreach ($data as $key => $datum) {//找到儿子了if ($datum['pid'] == $id) {//保存下来,然后继续找儿子的儿子$child[$datum['id']] = $datum;//先去掉自己,自己不可能是自己的儿孙unset($data[$key]);//递归找,并把找到的儿子放到一个child的字段中$child[$datum['id']]['child'] = $this->getChild($data, $datum['id']);}}return $child;}

运行结果:

引用

  • 引用确实是一个非常巧妙的方法,也不用像递归那样循环那么多次,思路就是首先把所有数据以id为索引重新排列,排列之后长这个样子:
  • 然后重点来啦!!!然后只需要找到根节点,也就是pid是0的三条数据,把它们放到一个全新的数组中,注意:这里的放并不是简单的赋值,而是引用之前的地址。这两者有什么不同呢,这里简单几个例子说明一下:
 function test(){$a=1;$b=$a;  //赋值$b1=&$a;//赋址$a=2;dump('$b的值是:'.$b);dump('$b1的值是:'.$b1);}

最开始$a初始化为1,把$a的值(也就是1)赋给变量$b,然后把$a的地址(内存地址)赋给$b1,然后改变$a的值,再查看$b$b的值。结果如下:

我们发现$b的值还是1,而$b1的值却跟随着$a的改变而改变了,这就是因为$b保存的是$a的地址,无论$a怎么变他们的值都会保持一致。
回到我们之前的问题上来,我们用新的数组保存了根节点的地址,后面无论根节点怎么变我们的新数组都会和变化过后的数据保持一致;那么不是根节点的数据怎么处理呢,我们这里可以把它的地址放到他爹的儿子节点当中,这样的话就是一层层引用,最后所有的数据都被新数组引用了。
说了这么多,代码如下:

function getChild($data){$tree = [];$newData = [];//循环重新排列foreach ($data as $datum) {$newData[$datum['id']] = $datum;}foreach ($newData as $key => $datum) {if ($datum['pid'] > 0) {//不是根节点的将自己的地址放到父级的child节点$newData[$datum['pid']]['child'][] = &$newData[$key];} else {//根节点直接把地址放到新数组中$tree[] = &$newData[$datum['id']];}}return $tree;}

运行结果:

参考文档

https://www.cnblogs.com/vishun/p/6716483.html

PHP实现无限级分类(递归+引用)相关推荐

  1. php无限级分类是什么意思,PHP 无限级分类(递归)

    网上有很多,这是我自己做测试用的 $arr = array( array('id'=>1,'name'=>'电脑','pid'=>0), array('id'=>2,'name ...

  2. 无限级分类递归法(超简单)

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <select name="categoryid&q ...

  3. 迭代与递归实现无限级分类

    无限级分类是开发中常见的情况了,在这里我收藏了下并整理了下常见的无限极分类算法总结归纳. <?php $arr = [1=>['id'=>1,'name'=>'家居','fat ...

  4. php无限分类原理,php 递归无限级分类原理和实现代码

    递归无限级分类的原理: 每一个分类都记录它的父级id,当为顶级分类时,父级id为0.这样无论哪个分类,都可以通过父级id一层一层去查明它的所有父级,以便清楚知道它所属何种分类,层级深度为几. 对数据进 ...

  5. php如何对 mysql 中text类型拆分存入一个数组_PHP递归实现无限级分类,可选返回字符串和数组...

    正 文: 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 递归,简单的说就是 ...

  6. php递归 返回数组,php 递归 无限级分类并返回数组的例子

    /** * 递归 无限级分类 返回数组 * link:www.jquerycn.cn * date:2013/2/21 */ $conn = mysql_connect('localhost','ro ...

  7. php无极分类非递归_PHP中的无限级分类、无限嵌套评论

    php中文网最新课程 每日17点准时技术干货分享 一般来说,递归被称为函数自身的调用. 递归在开发中的实际运用 N级分类 无限级的分类在平常的开发中是常见的需求,并且在不少面试题中都会碰到.不管你做什 ...

  8. php递归分组,PHP递归实现无限级分类

    本篇文章的内容是PHP递归实现无限级分类,现在分享给大家,有需要的朋友也可以参考一下,大家一起过来看看吧$datasection = array( array('id' => 1, 'name' ...

  9. php无极分类非递归_php实现无限级分类(递归方法)

    相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径.各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了. 到网上一搜php无限极分类,很多 ...

  10. jquery实现层级显示 效果图_php运用无限级分类实现评论及回复功能

    经常在各大论坛或新闻板块详情页面下边看到评论功能,当然不单单是直接发表评论内容那么简单,可以对别人的评论进行回复,别人又可以对你的回复再次评论或回复,如此反复,理论上可以说是没有休止; 从技术角度分析 ...

最新文章

  1. B站资源推荐:复旦大学机器学习、深度学习公开课,附PDF课件下载
  2. 文件字符流 编码判断
  3. 温州大学《深度学习》课程课件(六、机器学习实践)
  4. jboss4 java_带有JBoss工具的OpenShift 3上的Java EE 7应用程序
  5. python random模块导入_Python学习笔记(二十)—模块的导入
  6. 【李宏毅2020 ML/DL】P77 Generative Adversarial Network | Theory behind GAN
  7. [转]oracle分页用两层循环还是三层循环?
  8. sort排序和uniq使用
  9. C# 数组比较--取得两个集合的交集,差集,并集的方法
  10. SQLite:在Julia中判断一个表是否存在数据库中?
  11. STM32F7 SAI驱动
  12. 以企业入侵检测日志分析为场景漫谈大数据安全
  13. 简单阻抗匹配电路及公式
  14. OSPF的6种LSA
  15. 微信无法定位 请打开定位服务器,微信定位是灰色的点不开是怎么回事?该怎么解决问题呢?...
  16. jzoj4024 [佛山市选2015]石子游戏
  17. 10_Rapidly Exploring Random Trees_宾夕法尼亚大学机器人运动规划专项课程【学习笔记】
  18. 宏观经济学第9版笔记和课后答案 曼昆
  19. 阅读提升领导力——领导者应该多读书
  20. Oracle的sqlplus使用,sqlplus命令的使用-Oracle

热门文章

  1. MacDroid for Mac v1.4 安卓手机文件传输助手
  2. html实现气流动态图,新风系统的动态图,简单易懂
  3. Secure Boot Violation报错
  4. 湿润的武汉,湿润的心;干燥的北京,干涸的心。
  5. 计算机网络——域名系统(DNS)
  6. 深度学习遥感图像分类常用数据集简介以及下载地址
  7. 目标检测等相关评价指标(AP AR Average Precision和Average Recall)
  8. python 词表里的词不符合_一年级语文下册,第1~4单元生字笔顺组词表,家长:这也太全面了...
  9. Bootstrap 组件:缩略图组件(thumbnail)
  10. When Seawater Turns Sweet