手机版

PHP迭代和递归实现无限分类

时间:2021-09-03 来源:互联网 编辑:宝哥软件园 浏览:

无限分类是发展中常见的情况,因此本文总结了常见的无限分类算法。

1.循环迭代实现

$arr=[1=['id'=1,' name'=' parent 1 ','父辈'=null],2=['id'=2,' name'=' parent 2 ','父辈'=null],3=['id'=3,父辈'=1],5=['id'=5,' name'=' children 1-2 ','父辈'=1 ',6=['id'=6,' name'=' children 1-3 ','父辈'=1 ',7=。父亲'=2 ',9=['id'=9,'姓名'='儿子3-1 ','父亲'=3 ',10=['id'=10,'姓名'='儿子3-1-1 ','父亲'=9]函数generateTree($ items){ $ tree=array();foreach($ items as $ item){ if(isset($ items[$ item['父亲'])){ $items[$item['父亲']]['儿子'][]=$ items[$ item[' id ']];} else { $ tree[]=$ items[$ items[' id ']];} }返回$ tree} $ tree=generate tree($ arr);print _ r(JSON _ encode($ tree));输出:

分析:

该算法采用循环迭代,根据父子关系将线性结构输出为树形结构。算法的关键在于引用的使用。

优势:快速高效。

缺点:数组的键值必须和id值相同,不方便取出数据(也使用迭代数据采集)

2.递归实现

$arr=[0=['id'=1,' name'=' parent 1 ','父辈'=0 ',1=['id'=2,' name'=' parent 2 ','父辈'=0 ',2=['id'=3,4=['id'=5,' name'=' son 1-2 ','父辈'=1 ',5=['id'=6,' name'=' son 1-3 ','父辈'=1 ',6=['id'=7,8=['id'=9,' name'=' son 3-1 ','父亲'=3 ',9=['id'=10,' name'=' son 3-1-1 ','父亲'=9 ',10=['id '。函数generateTree($arr,$id,$ step){ static $ tree=[];foreach($ arr as $ key=$ val){ if($ val['父亲']==$ id){ $ flg=str_repeat('―',$step);$val['name']=$flg。$ val[' name '];$ tree[]=$ val;generateTree($arr,$val['id'],$ step 1);} }返回$ tree}$tree=generateTree($arr,0,0);foreach($ tree as $ val){ echo $ val[' name ']。br ';}输出:

分析:

使用递归,数组的键值和id值可以不同,最后以顺序结构输出数组

优点:便于遍历和查找父子元素

缺点:php不擅长递归,数据量大时效率会明显降低

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:PHP迭代和递归实现无限分类是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。