搜索
系统检测到您的用户名不符合规范:

php 无限分类递归树形 函数(稳定版)

浏览:6514 发布日期:2017年04月01日 分类:基础算法 关键字: 无限分类递归树 树形
今天闲着无事,对网上的一大堆 无限树形递归分类方法。都觉得不好用。要不就是ID乱序有问题。反正就是不稳定,然后重新以小白的形式写了一下。先是写了一个javascript无限递归树形分类,然后移值到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,tree的前置申明,可以删除。
今天闲着无事,对网上的一大堆 无限树形递归分类方法。都觉得不好用。要不就是ID乱序有问题。反正就是不稳定,然后重新以小白的形式写了一下。先是写了一个javascript无限递归树形分类,然后移值到php中

思路

2 .第1句 用原始数据 以ID的形式,生成新的索引树..
要点:需要熟悉数组的引用方式。我的$map数据里面的数据,是以引用的方式,赋值的。也就是说修改map的数据会影响到原始数据
foreach ($items as &$it){ $map[$it['id']] = &$it; }
1
3.有了第1句第2句就很好理解了
循环遍历原始数据
在map里面查找每一项的pid父级对应的项,这里新生成了一个$parent变量
注意:$parent变量值,是在map当中查找到之后,以引用的方式赋值的
foreach ($items as &$it){
$parent = &$map[$it[$pid]];
if($parent) {
$parent['son'][] = &$it;
}else{
$tree[] = &$it;
}
}
1
2
3
4
5
6
7
8
找到对应的pid项,引用过来后,判断此项是否存在
也就是说如果,父级项存在,我们就在此父级项$parent中写入 son字数据
这个子数据就是当前遍历的项,当我们往$parent加入数据之后,其实map里面的数据也在改变
最后如果判断的parent父级项不存在,那个直接添加到tree结果中。

注意:在给$tree写入数据时,你们也能注意到,是以引用的方式.
同时贴上我的另一篇博客

javascript分类树 http://blog.csdn.net/jayhkw/article/details/68945087
评论() 相关
收藏
jayhkw
积分:564 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /