php 无限分类递归树形(稳定版)
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 无限分类递归树形(稳定版)相关推荐
- 可能存在无限递归_无限分类递归+排序解剖
首先我们先了解一下递归函数: 递归函数在语言学习的时候会单独拿出来学习,因为它非常常用,本质上来讲递归函数就是调用自己的函数. 举个例子: test函数里面又再调用了自身,这就是俗称的递归函数!递归函 ...
- JS当中的无限分类递归树
列表转换成树形结构方法定义: //javascript 树形结构 function toTree(data) {// 删除 所有 children,以防止多次调用data.forEach(functi ...
- ASP无限分类数据库版
数据库Access,字段:ClassID(主键),ParentClassID,ClassName,3个字段都是文本型. <!DOCTYPE html PUBLIC "-//W3C//D ...
- php无限极下拉框,php递归实现无限分类生成下拉列表的函数
代码如下: /*------------------ */ //– 递归实现无限分类生成下拉列表函数 //– $tpl->assign('sort_list',createSortOptions ...
- php 非递归调用,php 无限分类(非递归)
/** * 无限分类 * 2011/8/24 * kcj * */ include "../conn/conn.php"; $flpid=$_POST['flpid']; $flt ...
- php生成option,php递归实现无限分类生成下拉列表的函数
/*------------------ */ //– 递归实现无限分类生成下拉列表函数 //– $tpl->assign('sort_list',createSortOptions ()); ...
- php实现无限极分类递归调用
工作中经常使用到使用php递归来进行数据库数据的树状显示,层级显示,无限极分类等 数据库设计的逻辑大概为 比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 如下: $array ...
- 稳定版全网淘宝商品接口,淘宝主图接口取分类,主图,标题,价格,旺旺等
稳定版全网淘宝商品接口,淘宝主图接口取分类,主图,标题,价格,旺旺等 { "data": { "defPrice": "268 ...
- php递归处理数组,PHP递归实现无限分类数组处理
PHP递归实现无限分类数组处理 1,php递归算法实现无限分类 递归算法对无限分类的数组进行处理,分两种情况, 一种树状展示(数组包含子数组), 一种非树状展示(子类按照顺序排在父类的下面,不出现数组 ...
最新文章
- SLAM之特征匹配(三)————RANSAC------LO-RANSAC Algorithm
- Nginx —— nginx的命令行控制(nginx的启动与停止、重载配置文件、回滚日志文件、平滑升级等操作)
- 博通的“交钥匙”策略
- 支持python开发的环境有哪些变化_Python开发实践:打造完美的项目工程环境
- 【HDU - 1326】Box of Bricks(模拟水题)
- Python PIL(图像处理库)使用方法
- 5000字 大数据时代读书笔记_大数据时代 读书笔记
- zookeeper watch java_Apache ZooKeeper Watcher 机制源码解释
- 网页整个技术文档怎么拷贝_企业文档管理混乱?试试文档管理系统
- 【优化预测】基于matlab遗传算法优化BP神经网络预测【含Matlab源码 1376期】
- 2007年沪市上涨前20与后20
- 死磕 Fragment 的生命周期
- Linux下搭建jmeter+svn+jenkins+ant持续集成(CI)框架
- sails mysql_Sails+MVC+Mysql+Node+学习笔记一
- pyTest官方手册(Release 4.2)之蹩脚翻译(2)
- 世人谓我太疯癫,我笑世人看不穿
- apktool安装过程
- 电子产品长时间不充电导致无法开机、故障、充不满电等问题(如kindle:电池+叹号)
- 计算机视觉cv(1)
- 哈勃深空场以及星系合并的宇宙瑰丽景象