无限级分类是开发中常见的情况,也经常会在面试,主考官问到,笔试中遇到,因此本文对常见的无限极分类算法进行总结归纳,其实大多数就是迭代与递归。

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算法,无限极分类算法,对你一定有帮助相关推荐

  1. 时间序列分类算法_时间序列分类算法简介

    时间序列分类算法 A common task for time series machine learning is classification. Given a set of time serie ...

  2. 桶分类 算法_桶分类算法

    桶分类 算法 桶分类 (Bucket Sort) Bucket sort is a sorting technique in which array is partitioned into the b ...

  3. java 鸢尾花分类算法_鸢尾花分类算法实现 java

    使用的贝叶斯分类算法实现的,编程语言为java.是我本学期修的数据库与数据挖掘的课程的期末课程作业,算法本身不难,思路理清楚了很简单. 先看看鸢尾花(Iris)数据集(下图为数据集的部分截图),鸢尾花 ...

  4. k近邻算法_机器学习分类算法之k近邻算法

    本编文章将介绍机器学习入门算法-k近邻算法,将会用demo演示机器学习分类算法. 在先介绍算法时,先回顾分类和回归的区别.像文章分类识别也是这样处理的,如1代表体育,2代表科技,3代表娱乐属于分类问题 ...

  5. 基于贝叶斯算法的文本分类算法

    因为要做一个关于数据挖掘的算法应用PPT,虽然知道很多数据挖掘的算法怎么使用,但是需要讲解它们的原理,还真的需要耗费很多精力,之前做一个曲线拟合,已经发在博客里,现在做贝叶斯算法的基础原理. 1.基本 ...

  6. CV算法复现(分类算法6/6):MobileNet(2017年V1,2018年V2,2019年V3,谷歌)

    致谢:霹雳吧啦Wz:霹雳吧啦Wz的个人空间_哔哩哔哩_Bilibili 目录 致谢:霹雳吧啦Wz:霹雳吧啦Wz的个人空间_哔哩哔哩_Bilibili 1 本次要点 1.1 pytorch框架语法 2 ...

  7. 机器学习分类算法_机器学习分类算法

    人们曾在自身的神经元得到启发,将机器学习中给出的特征输入与权重之积作为输出与阈值作比较,得到0或者1的输出. 这就是我们感知器的实现原理 感知器在实现过程中的步骤如下: ①将权值初始化称为一个很小的向 ...

  8. CV算法复现(分类算法5/6):ResNet(2015年 微软亚洲研究院)

    致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 目录 致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 1 本次要 ...

  9. CV算法复现(分类算法4/6):GoogLeNet(2014年 谷歌)

    致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 目录 致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 1 本次要 ...

  10. CV算法复现(分类算法3/6):VGG(2014年 牛津大学)

    致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 目录 致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 1 本次要 ...

最新文章

  1. 土壤生物多样性与生物化学过程研讨会(6.20-23合肥)
  2. 卷积网络基础知识---Group Convolution分组卷积
  3. dell笔记本电脑驱动_戴尔Dell电脑u盘启动盘重装win10系统步骤
  4. 算法 有两个相同大小数组均已按升序排列好 编程计算这两个数组的中位数 C
  5. Android ContentProvider
  6. Android之popWindows底部弹出挡住了华为虚拟键盘问题
  7. 使用RegularExpressionValidator验证(转)
  8. Cron 触发器及相关内容 (第一部分)
  9. nodejs mysql save_NodeJs Mysql简易操作工具
  10. 数据包在 Istio 网格中的生命周期
  11. 如何让Android横竖屏切换时不销毁当前activity
  12. Lucene查询结果高亮
  13. php static 关键字
  14. 韩信点兵python算法_韩信点兵算法流程图
  15. 深度隐藏文件或文件夹原理与应用
  16. selenium录屏python_Selenium实现录屏的一种方法
  17. UE4 第三人称完全流程
  18. 人事部门HR办公流程自动化-人事部门RPA机器人流程自动化解决方案
  19. Node 系列 - 007 - node-xlsx
  20. Flink迟到数据处理

热门文章

  1. Redis缓存那点破事 , 绝杀面试官 25 问
  2. Map集合使用get方法返回null抛出空指针异常问题
  3. pythonsql注入步骤_防止SQL注入解决方案
  4. android plugin 镜像,cordova-plugin-screen-orientation
  5. 嵌入式linux组件,嵌入式Linux系统的几大组件!
  6. aix vnc oracle,请问如何配置AIX上的vnc
  7. java开发怎么优化代码,代码优化,该如何处理
  8. codesys com库_CODESYS在线库,酷德网镜像站启用
  9. 单片机集成wifi等_从零制作单片机需要哪些知识?
  10. linux替换windows回车,转载 vi替换windows换行符为linux换行符