array(4) {[0] => array(4) {["id"] => int(3)["name"] => string(6) "餐厅"["pid"] => int(1)["sort"] => int(50)}[1] => array(4) {["id"] => int(2)["name"] => string(6) "建材"["pid"] => int(0)["sort"] => int(50)}[2] => array(4) {["id"] => int(1)["name"] => string(6) "家居"["pid"] => int(0)["sort"] => int(50)}[3] => array(4) {["id"] => int(4)["name"] => string(6) "客厅"["pid"] => int(1)["sort"] => int(50)}
}

函数

function genTree($items,$pid ="pid") {$map  = [];$tree = [];   foreach ($items as &$it){ $map[$it['id']] = &$it; }  //数据的ID名生成新的引用索引树foreach ($items as &$it){$parent = &$map[$it[$pid]];if($parent) {$parent['son'][] = &$it;}else{$tree[] = &$it;}}return $tree;
}

map,map,tree的前置申明,可以删除。

今天闲着无事,对网上的一大堆 无限树形递归分类方法。都觉得不好用。要不就是ID乱序有问题。反正就是不稳定,然后重新以小白的形式写了一下。先是写了一个javascript无限递归树形分类,然后移值到php中

思路

  • 1 .第二句 用原始数据 以ID的形式,生成新的索引树..
    要点:需要熟悉数组的引用方式。我的$map数据里面的数据,是以引用的方式,赋值的。也就是说修改map的数据会影响到原始数据
foreach ($items as &$it){ $map[$it['id']] = &$it; }
  • 2.有了第二句第三名就很好理解了
    循环遍历原始数据
    在map里面查找每一项的pid父级对应的项,这里新生成了一个$parent变量

注意:$parent变量值,是在map当中查找到之后,以引用的方式赋值的

foreach ($items as &$it){$parent = &$map[$it[$pid]];if($parent) {$parent['son'][] = &$it;}else{$tree[] = &$it;}}
  • 找到对应的pid项,引用过来后,判断此项是否存在
    也就是说如果,父级项存在,我们就在此父级项$parent中写入 son字数据

这个子数据就是当前遍历的项,当我们往$parent加入数据之后,其实map里面的数据也在改变
最后如果判断的parent父级项不存在,那个直接添加到tree结果中。

注意:在给$tree写入数据时,你们也能注意到,是以引用的方式.

同时贴上我的另一篇博客

javascript分类树 http://blog.csdn.net/jayhkw/article/details/68945087

php 无限分类递归树形(稳定版)相关推荐

  1. 可能存在无限递归_无限分类递归+排序解剖

    首先我们先了解一下递归函数: 递归函数在语言学习的时候会单独拿出来学习,因为它非常常用,本质上来讲递归函数就是调用自己的函数. 举个例子: test函数里面又再调用了自身,这就是俗称的递归函数!递归函 ...

  2. JS当中的无限分类递归树

    列表转换成树形结构方法定义: //javascript 树形结构 function toTree(data) {// 删除 所有 children,以防止多次调用data.forEach(functi ...

  3. ASP无限分类数据库版

    数据库Access,字段:ClassID(主键),ParentClassID,ClassName,3个字段都是文本型. <!DOCTYPE html PUBLIC "-//W3C//D ...

  4. php无限极下拉框,php递归实现无限分类生成下拉列表的函数

    代码如下: /*------------------ */ //– 递归实现无限分类生成下拉列表函数 //– $tpl->assign('sort_list',createSortOptions ...

  5. php 非递归调用,php 无限分类(非递归)

    /** * 无限分类 * 2011/8/24 * kcj * */ include "../conn/conn.php"; $flpid=$_POST['flpid']; $flt ...

  6. php生成option,php递归实现无限分类生成下拉列表的函数

    /*------------------ */ //– 递归实现无限分类生成下拉列表函数 //– $tpl->assign('sort_list',createSortOptions ()); ...

  7. php实现无限极分类递归调用

    工作中经常使用到使用php递归来进行数据库数据的树状显示,层级显示,无限极分类等 数据库设计的逻辑大概为 比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 如下: $array ...

  8. 稳定版全网淘宝商品接口,淘宝主图接口取分类,主图,标题,价格,旺旺等

    稳定版全网淘宝商品接口,淘宝主图接口取分类,主图,标题,价格,旺旺等 {     "data": {         "defPrice": "268 ...

  9. php递归处理数组,PHP递归实现无限分类数组处理

    PHP递归实现无限分类数组处理 1,php递归算法实现无限分类 递归算法对无限分类的数组进行处理,分两种情况, 一种树状展示(数组包含子数组), 一种非树状展示(子类按照顺序排在父类的下面,不出现数组 ...

最新文章

  1. SLAM之特征匹配(三)————RANSAC------LO-RANSAC Algorithm
  2. Nginx —— nginx的命令行控制(nginx的启动与停止、重载配置文件、回滚日志文件、平滑升级等操作)
  3. 博通的“交钥匙”策略
  4. 支持python开发的环境有哪些变化_Python开发实践:打造完美的项目工程环境
  5. 【HDU - 1326】Box of Bricks(模拟水题)
  6. Python PIL(图像处理库)使用方法
  7. 5000字 大数据时代读书笔记_大数据时代 读书笔记
  8. zookeeper watch java_Apache ZooKeeper Watcher 机制源码解释
  9. 网页整个技术文档怎么拷贝_企业文档管理混乱?试试文档管理系统
  10. 【优化预测】基于matlab遗传算法优化BP神经网络预测【含Matlab源码 1376期】
  11. 2007年沪市上涨前20与后20
  12. 死磕 Fragment 的生命周期
  13. Linux下搭建jmeter+svn+jenkins+ant持续集成(CI)框架
  14. sails mysql_Sails+MVC+Mysql+Node+学习笔记一
  15. pyTest官方手册(Release 4.2)之蹩脚翻译(2)
  16. 世人谓我太疯癫,我笑世人看不穿
  17. apktool安装过程
  18. 电子产品长时间不充电导致无法开机、故障、充不满电等问题(如kindle:电池+叹号)
  19. 计算机视觉cv(1)
  20. 哈勃深空场以及星系合并的宇宙瑰丽景象

热门文章

  1. python 脏话处理、特殊词汇过滤
  2. ipad协议,windows协议。
  3. 阿里云轻量级服务器配置 XFCE 图形界面(Ubuntu 18)
  4. NS3概念概述及first.cc讲解
  5. Excel批量插入工作表
  6. SQL Server 2008 连接JDBC详细图文教程
  7. 旷视科技成立 6 周年,我们和孙剑聊了聊
  8. 使用 Jest + Testing Library 完成 React 的单元测试
  9. 64 岁董明珠:不想做芯片的手机不是好空调
  10. 简约-Markdown教程