简述php无限极分类,PHP 无限极分类
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 无限极分类相关推荐
- php控制器无限极分类,thinkphp无限极分类实现方法
本文讲解了thinkphp框架下实现无限级分类的方法,无限级分类一般应用在网站的分类菜单中,是很常用的数据结构和功能,在thinkphp中实现这种方法也是很容易的一件事,接下来我们就来学习下如何来使用 ...
- 学习使用php实现无限极评论和无限极转二级评论解决方案
学习使用php实现无限极评论和无限极转二级评论解决方案 评论数组 无限极评论 二级评论 评论数组 $parent_comment_id = 317;$comment_str = '[{"co ...
- php无极分类非递归_PHP中的无限级分类、无限嵌套评论
php中文网最新课程 每日17点准时技术干货分享 一般来说,递归被称为函数自身的调用. 递归在开发中的实际运用 N级分类 无限级的分类在平常的开发中是常见的需求,并且在不少面试题中都会碰到.不管你做什 ...
- 极流行的四型人格分类,你是哪一种?
极流行的四型人格分类,你是哪一种? 2007-04-29 01:11 P.M. 在每行中挑选一个与您最相近的形容词(每题必须选一个并且只能选一个)若您在某一题上实在无法判断 请考虑3年前的自己的特征作 ...
- 极客时间和极客学院_极客历史记录的本周:Twitter的诞生,OS X十周年以及太空停留时间最长的时代即将结束...
极客时间和极客学院 Every week we bring you interesting trivia and milestones from the archives of Geekdom. To ...
- everything便携版和安装版区别_什么是超极本?超极本和笔记本的区别科普知识...
众所周知,笔记本又被称为"便携式电脑",笔记本相比台式机主要区别就是在于机身小巧,便于携带.笔记本是个总称大的类别,由于定位不同,市场上分别有上网本.游戏本.商务本.超极本等,它们 ...
- lol无限乱斗服务器,LOL无限火力升级无限乱斗 LOL无限乱斗玩法攻略
LOL无限火力升级无限乱斗 LOL无限乱斗玩法攻略.轮换模式队列--"吉格斯的实验室"将于9月30日18:00更新,此次开启的模式为--"无限乱斗!" . 本周 ...
- 无限纷争怎么看以前的服务器,无限纷争怎么切换角色 无限纷争切换角色方法...
无限纷争怎么切换角色 无限纷争切换角色方法 无限纷争这款游戏中有百余名的死神角色去轮番的登场,这款游戏对<死神BLEACH>漫画的高度还原,斩魂刀.鬼道.卍解.羁绊等养成体系,可以体验到* ...
- 手机做web服务器 无限流量,想要无限流量套餐?别做梦了!
随着移动互联网的发展,人们对于移动网络的需求日益增长.从早期的2G.3G到如今足以媲美高速宽带的4G网络,虽然速度上去了,上网体验变好了,但随之而来的流量套餐资费给用户的压力却越来越大. 去年,为了落 ...
- 极客时间和极客学院_极客需要告诉我们的父母有关安全可靠地在线购物的信息
极客时间和极客学院 Mom and Dad, it's a dangerous Internet. You like it and you use it but you don't understan ...
最新文章
- JavaWeb总结(四)—JSP深入解析
- 【PC工具】PhotoScape简单好用绿色免费功能强大的照片编辑器(文章评论小程序测试)...
- Android8.0适配方案
- sql语句练习(二):Demand
- [SharePoint][SharePoint2013循序渐进]SPS2013简介
- 差点令金融世界崩塌的数学公式
- linux 下载mysql5.7.22
- bootstrap 导航菜单 折叠位置_python测试开发django44.xadmin自定义菜单项
- c# 中如何设置combox 让出现text value两个值 winform开发
- LeetCode(461)——汉明距离(JavaScript)
- ArcGIS 在线地图加载插件介绍
- 电子束光刻胶(SU-8 GM1010,HSQ,XR-1541-002/004/006,HSQ Fox-15/16,PMMA)
- Kaldi在线搭建语音识别系统-李健
- 简单学生成绩分析系统
- 给在读研究生的一封信
- 【音频处理】python将两个单声道wav音频合成一个双声道wav音频_立体声感
- Intel VT学习笔记(二)—— VMXEVMXON
- python中tell_Python中tell()方法的使用详解
- Linux下开源库的使用(共享库文件头文件配置全局搜索)(WSL)
- java该怎么做笔记_JAVA学习笔记