加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP迭代与递归实现无限级分类

发布时间:2021-03-07 09:36:13 所属栏目:PHP教程 来源:网络整理
导读:无限级分类是开发中常见的情况,因此本文对常见的无限极分类算法进行总结归纳. 1.循环迭代实现 ['id'=>1,'name'=>'父1','father'=>NULL],2=>['id'=>2,'name'=>'父2',3=>['id'=>3,'name'=>'父3',4=>['id'=>4,'name'=>'儿1-1','father'=>1],5=>['id'=>5,'name

无限级分类是开发中常见的情况,因此本文对常见的无限极分类算法进行总结归纳.

1.循环迭代实现

['id'=>1,'name'=>'父1','father'=>NULL],2=>['id'=>2,'name'=>'父2',3=>['id'=>3,'name'=>'父3',4=>['id'=>4,'name'=>'儿1-1','father'=>1],5=>['id'=>5,'name'=>'儿1-2',6=>['id'=>6,'name'=>'儿1-3',7=>['id'=>7,'name'=>'儿2-1','father'=>2],8=>['id'=>8,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.递归实现

['id'=>1,'father'=>0],1=>['id'=>2,2=>['id'=>3,3=>['id'=>4,4=>['id'=>5,5=>['id'=>6,6=>['id'=>7,7=>['id'=>8,8=>['id'=>9,9=>['id'=>10,10=>['id'=>11,11=>['id'=>12,]; 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); foreach ($tree as $val){ echo $val['name'].'
'; }

输出:

分析:

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读