无限极 php算法,无限极分类算法,对你一定有帮助
无限级分类是开发中常见的情况,也经常会在面试,主考官问到,笔试中遇到,因此本文对常见的无限极分类算法进行总结归纳,其实大多数就是迭代与递归。
1.循环迭代实现
$arr = [
1=>['id'=>1,'name'=>'父1','father'=>NULL],
2=>['id'=>2,'name'=>'父2','father'=>NULL],
3=>['id'=>3,'name'=>'父3','father'=>NULL],
4=>['id'=>4,'name'=>'儿1-1','father'=>1],
5=>['id'=>5,'name'=>'儿1-2','father'=>1],
6=>['id'=>6,'name'=>'儿1-3','father'=>1],
7=>['id'=>7,'name'=>'儿2-1','father'=>2],
8=>['id'=>8,'name'=>'儿2-1','father'=>2],
9=>['id'=>9,'name'=>'儿3-1','father'=>3],
10=>['id'=>10,'name'=>'儿3-1-1','father'=>9],
11=>['id'=>11,'name'=>'儿1-1-1','father'=>4],
12=>['id'=>12,'name'=>'儿2-1-1','father'=>7],
];
function generateTree($items){
$tree = array();
foreach($items as $item){
if(isset($items[$item['father']])){
$items[$item['father']]['son'][] = &$items[$item['id']];
}else{
$tree[] = &$items[$item['id']];
}
}
return $tree;
}
$tree = generateTree($arr);
print_r(json_encode($tree));
输出:
分析:
这个算法利用了循环迭代,将线性结构按照父子关系以树形结构输出,算法的关键在于使用了引用.
优点:速度快,效率高.
缺点:数组的key值必须与id值相同,不便于取出数据(同样使用迭代获取数据)
2.递归实现
$arr = [
0=>['id'=>1,'name'=>'父1','father'=>0],
1=>['id'=>2,'name'=>'父2','father'=>0],
2=>['id'=>3,'name'=>'父3','father'=>0],
3=>['id'=>4,'name'=>'儿1-1','father'=>1],
4=>['id'=>5,'name'=>'儿1-2','father'=>1],
5=>['id'=>6,'name'=>'儿1-3','father'=>1],
6=>['id'=>7,'name'=>'儿2-1','father'=>2],
7=>['id'=>8,'name'=>'儿2-1','father'=>2],
8=>['id'=>9,'name'=>'儿3-1','father'=>3],
9=>['id'=>10,'name'=>'儿3-1-1','father'=>9],
10=>['id'=>11,'name'=>'儿1-1-1','father'=>4],
11=>['id'=>12,'name'=>'儿2-1-1','father'=>7],
];
function generateTree($arr,$id,$step){
static $tree=[];
foreach($arr as $key=>$val) {
if($val['father'] == $id) {
$flg = str_repeat('└―',$step);
$val['name'] = $flg.$val['name'];
$tree[] = $val;
generateTree($arr , $val['id'] ,$step+1);
}
}
return $tree;
}
$tree = generateTree($arr,0,0);
foreach ($tree as $val){
echo $val['name'].'
';
}
输出
分析:
利用了递归,数组的key值与id值可以不相同,最后以顺序的结构输出数组
优点:方便遍历,查找父子元素
缺点:php不擅长递归,数据量大的情况下效率会显著降低
无限极 php算法,无限极分类算法,对你一定有帮助相关推荐
- 时间序列分类算法_时间序列分类算法简介
时间序列分类算法 A common task for time series machine learning is classification. Given a set of time serie ...
- 桶分类 算法_桶分类算法
桶分类 算法 桶分类 (Bucket Sort) Bucket sort is a sorting technique in which array is partitioned into the b ...
- java 鸢尾花分类算法_鸢尾花分类算法实现 java
使用的贝叶斯分类算法实现的,编程语言为java.是我本学期修的数据库与数据挖掘的课程的期末课程作业,算法本身不难,思路理清楚了很简单. 先看看鸢尾花(Iris)数据集(下图为数据集的部分截图),鸢尾花 ...
- k近邻算法_机器学习分类算法之k近邻算法
本编文章将介绍机器学习入门算法-k近邻算法,将会用demo演示机器学习分类算法. 在先介绍算法时,先回顾分类和回归的区别.像文章分类识别也是这样处理的,如1代表体育,2代表科技,3代表娱乐属于分类问题 ...
- 基于贝叶斯算法的文本分类算法
因为要做一个关于数据挖掘的算法应用PPT,虽然知道很多数据挖掘的算法怎么使用,但是需要讲解它们的原理,还真的需要耗费很多精力,之前做一个曲线拟合,已经发在博客里,现在做贝叶斯算法的基础原理. 1.基本 ...
- CV算法复现(分类算法6/6):MobileNet(2017年V1,2018年V2,2019年V3,谷歌)
致谢:霹雳吧啦Wz:霹雳吧啦Wz的个人空间_哔哩哔哩_Bilibili 目录 致谢:霹雳吧啦Wz:霹雳吧啦Wz的个人空间_哔哩哔哩_Bilibili 1 本次要点 1.1 pytorch框架语法 2 ...
- 机器学习分类算法_机器学习分类算法
人们曾在自身的神经元得到启发,将机器学习中给出的特征输入与权重之积作为输出与阈值作比较,得到0或者1的输出. 这就是我们感知器的实现原理 感知器在实现过程中的步骤如下: ①将权值初始化称为一个很小的向 ...
- CV算法复现(分类算法5/6):ResNet(2015年 微软亚洲研究院)
致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 目录 致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 1 本次要 ...
- CV算法复现(分类算法4/6):GoogLeNet(2014年 谷歌)
致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 目录 致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 1 本次要 ...
- CV算法复现(分类算法3/6):VGG(2014年 牛津大学)
致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 目录 致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 1 本次要 ...
最新文章
- 土壤生物多样性与生物化学过程研讨会(6.20-23合肥)
- 卷积网络基础知识---Group Convolution分组卷积
- dell笔记本电脑驱动_戴尔Dell电脑u盘启动盘重装win10系统步骤
- 算法 有两个相同大小数组均已按升序排列好 编程计算这两个数组的中位数 C
- Android ContentProvider
- Android之popWindows底部弹出挡住了华为虚拟键盘问题
- 使用RegularExpressionValidator验证(转)
- Cron 触发器及相关内容 (第一部分)
- nodejs mysql save_NodeJs Mysql简易操作工具
- 数据包在 Istio 网格中的生命周期
- 如何让Android横竖屏切换时不销毁当前activity
- Lucene查询结果高亮
- php static 关键字
- 韩信点兵python算法_韩信点兵算法流程图
- 深度隐藏文件或文件夹原理与应用
- selenium录屏python_Selenium实现录屏的一种方法
- UE4 第三人称完全流程
- 人事部门HR办公流程自动化-人事部门RPA机器人流程自动化解决方案
- Node 系列 - 007 - node-xlsx
- Flink迟到数据处理
热门文章
- Redis缓存那点破事 , 绝杀面试官 25 问
- Map集合使用get方法返回null抛出空指针异常问题
- pythonsql注入步骤_防止SQL注入解决方案
- android plugin 镜像,cordova-plugin-screen-orientation
- 嵌入式linux组件,嵌入式Linux系统的几大组件!
- aix vnc oracle,请问如何配置AIX上的vnc
- java开发怎么优化代码,代码优化,该如何处理
- codesys com库_CODESYS在线库,酷德网镜像站启用
- 单片机集成wifi等_从零制作单片机需要哪些知识?
- linux替换windows回车,转载 vi替换windows换行符为linux换行符