1.循环迭代实现无限极分类

public function test(){

// 数组下标与id 一致

$depart_list = [

1 => ['id' => 1, 'grp_name' => '技术部', 'pid' => 0],

2 => ['id' => 2, 'grp_name' => '业务中台', 'pid' => 1],

3 => ['id' => 3, 'grp_name' => '业务前台', 'pid' => 1],

4 => ['id' => 4, 'grp_name' => '业务后台', 'pid' => 1],

5 => ['id' => 5, 'grp_name' => '客服组', 'pid' => 2],

6 => ['id' => 6, 'grp_name' => '管理系统组', 'pid' => 2],

7 => ['id' => 7, 'grp_name' => '支付组', 'pid' => 2],

8 => ['id' => 8, 'grp_name' => '用户组', 'pid' => 4],

9 => ['id' => 9, 'grp_name' => '司机组', 'pid' => 4],

10 => ['id' => 10, 'grp_name' => 'ios组', 'pid' => 3],

11 => ['id' => 11, 'grp_name' => 'android组', 'pid' => 3],

];

$depart_data = $this->generateTree($depart_list);

print_r(json_encode($depart_data, JSON_UNESCAPED_UNICODE));

}

function generateTree($items){

$tree = array();

foreach($items as $item){

if(isset($items[$item['pid']])){

$items[$item['pid']]['son'][] = &$items[$item['id']];

}else{

$tree[] = &$items[$item['id']];

}

}

return $tree;

}

输出结果如下:

[

{

"id": 1,

"grp_name": "技术部",

"pid": 0,

"son": [

{

"id": 2,

"grp_name": "业务中台",

"pid": 1,

"son": [

{

"id": 5,

"grp_name": "客服组",

"pid": 2

},

{

"id": 6,

"grp_name": "管理系统组",

"pid": 2

},

{

"id": 7,

"grp_name": "支付组",

"pid": 2

}

]

},

{

"id": 3,

"grp_name": "业务前台",

"pid": 1,

"son": [

{

"id": 10,

"grp_name": "ios组",

"pid": 3

},

{

"id": 11,

"grp_name": "android组",

"pid": 3

}

]

},

{

"id": 4,

"grp_name": "业务后台",

"pid": 1,

"son": [

{

"id": 8,

"grp_name": "用户组",

"pid": 4

},

{

"id": 9,

"grp_name": "司机组",

"pid": 4

}

]

}

]

}

]

分析:

这个算法利用了循环迭代,将线性结构按照父子关系以树形结构输出,算法的关键在于使用了引用.

优点:速度快,效率高.

缺点:数组的key值必须与id值相同,不便于取出数据(同样使用迭代获取数据)

2.递归实现无限极分类:

public function test(){

$depart_list = [

// 数组下标与id 可以不一致

0 => ['id' => 1, 'grp_name' => '技术部', 'pid' => 0],

1 => ['id' => 2, 'grp_name' => '业务中台', 'pid' => 1],

2 => ['id' => 3, 'grp_name' => '业务前台', 'pid' => 1],

3 => ['id' => 4, 'grp_name' => '业务后台', 'pid' => 1],

4 => ['id' => 5, 'grp_name' => '客服组', 'pid' => 2],

5 => ['id' => 6, 'grp_name' => '管理系统组', 'pid' => 2],

6 => ['id' => 7, 'grp_name' => '支付组', 'pid' => 2],

7 => ['id' => 8, 'grp_name' => '用户组', 'pid' => 4],

8 => ['id' => 9, 'grp_name' => '司机组', 'pid' => 4],

9 => ['id' => 10, 'grp_name' => 'ios组', 'pid' => 3],

10 => ['id' => 11, 'grp_name' => 'android组', 'pid' => 3],

];

$depart_data = $this->generateTree($depart_list, 0, 0);

foreach ($depart_data as $val){

echo $val['grp_name'].'
';

}

}

public function generateTree(array $items, $id, $step){

static $tree=[];

foreach($items as $key=>$val) {

if($val['pid'] == $id) {

$flg = str_repeat('―',$step*2);

$val['grp_name'] = $flg.$val['grp_name'];

$tree[] = $val;

$this->generateTree($items , $val['id'] ,$step+1);

}

}

return $tree;

}

输出如下:

BFC397D8-2535-4C62-9708-9BA121941774.png

分析:

利用了递归,数组的key值与id值可以不相同,最后以顺序的结构输出数组

优点:方便遍历,查找父子元素

缺点:php不擅长递归,数据量大的情况下效率会显著降低

简述php无限极分类,PHP 无限极分类相关推荐

  1. php控制器无限极分类,thinkphp无限极分类实现方法

    本文讲解了thinkphp框架下实现无限级分类的方法,无限级分类一般应用在网站的分类菜单中,是很常用的数据结构和功能,在thinkphp中实现这种方法也是很容易的一件事,接下来我们就来学习下如何来使用 ...

  2. 学习使用php实现无限极评论和无限极转二级评论解决方案

    学习使用php实现无限极评论和无限极转二级评论解决方案 评论数组 无限极评论 二级评论 评论数组 $parent_comment_id = 317;$comment_str = '[{"co ...

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

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

  4. 极流行的四型人格分类,你是哪一种?

    极流行的四型人格分类,你是哪一种? 2007-04-29 01:11 P.M. 在每行中挑选一个与您最相近的形容词(每题必须选一个并且只能选一个)若您在某一题上实在无法判断 请考虑3年前的自己的特征作 ...

  5. 极客时间和极客学院_极客历史记录的本周:Twitter的诞生,OS X十周年以及太空停留时间最长的时代即将结束...

    极客时间和极客学院 Every week we bring you interesting trivia and milestones from the archives of Geekdom. To ...

  6. everything便携版和安装版区别_什么是超极本?超极本和笔记本的区别科普知识...

    众所周知,笔记本又被称为"便携式电脑",笔记本相比台式机主要区别就是在于机身小巧,便于携带.笔记本是个总称大的类别,由于定位不同,市场上分别有上网本.游戏本.商务本.超极本等,它们 ...

  7. lol无限乱斗服务器,LOL无限火力升级无限乱斗 LOL无限乱斗玩法攻略

    LOL无限火力升级无限乱斗 LOL无限乱斗玩法攻略.轮换模式队列--"吉格斯的实验室"将于9月30日18:00更新,此次开启的模式为--"无限乱斗!" . 本周 ...

  8. 无限纷争怎么看以前的服务器,无限纷争怎么切换角色 无限纷争切换角色方法...

    无限纷争怎么切换角色 无限纷争切换角色方法 无限纷争这款游戏中有百余名的死神角色去轮番的登场,这款游戏对<死神BLEACH>漫画的高度还原,斩魂刀.鬼道.卍解.羁绊等养成体系,可以体验到* ...

  9. 手机做web服务器 无限流量,想要无限流量套餐?别做梦了!

    随着移动互联网的发展,人们对于移动网络的需求日益增长.从早期的2G.3G到如今足以媲美高速宽带的4G网络,虽然速度上去了,上网体验变好了,但随之而来的流量套餐资费给用户的压力却越来越大. 去年,为了落 ...

  10. 极客时间和极客学院_极客需要告诉我们的父母有关安全可靠地在线购物的信息

    极客时间和极客学院 Mom and Dad, it's a dangerous Internet. You like it and you use it but you don't understan ...

最新文章

  1. JavaWeb总结(四)—JSP深入解析
  2. 【PC工具】PhotoScape简单好用绿色免费功能强大的照片编辑器(文章评论小程序测试)...
  3. Android8.0适配方案
  4. sql语句练习(二):Demand
  5. [SharePoint][SharePoint2013循序渐进]SPS2013简介
  6. 差点令金融世界崩塌的数学公式
  7. linux 下载mysql5.7.22
  8. bootstrap 导航菜单 折叠位置_python测试开发django44.xadmin自定义菜单项
  9. c# 中如何设置combox 让出现text value两个值 winform开发
  10. LeetCode(461)——汉明距离(JavaScript)
  11. ArcGIS 在线地图加载插件介绍
  12. 电子束光刻胶(SU-8 GM1010,HSQ,XR-1541-002/004/006,HSQ Fox-15/16,PMMA)
  13. Kaldi在线搭建语音识别系统-李健
  14. 简单学生成绩分析系统
  15. 给在读研究生的一封信
  16. 【音频处理】python将两个单声道wav音频合成一个双声道wav音频_立体声感
  17. Intel VT学习笔记(二)—— VMXEVMXON
  18. python中tell_Python中tell()方法的使用详解
  19. Linux下开源库的使用(共享库文件头文件配置全局搜索)(WSL)
  20. java该怎么做笔记_JAVA学习笔记

热门文章

  1. OpenGL-顶点数组 缓冲区
  2. 七夕到了——属于程序员的浪漫
  3. vue项目实现多张图片导出zip文件
  4. 世界这么大 不如把OPPO R11s带回家
  5. 小尾羊的qt学习之路,01课,按钮
  6. 手机摄像头图像在电脑上显示-实现视频监控
  7. 地图API学习(1) 引入和初始化
  8. 007Pythom学习
  9. C语言函数如何正确返回数组?
  10. 孙溟㠭先生书法艺术——“求”