1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 无限极 php算法 无限极分类算法 对你一定有帮助

无限极 php算法 无限极分类算法 对你一定有帮助

时间:2019-09-27 08:28:59

相关推荐

无限极 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不擅长递归,数据量大的情况下效率会显著降低

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。