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

编程

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

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"]."<br>";

}

输出

分析:

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

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

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

 

以上是 无限极分类算法,对你一定有帮助 的全部内容, 来源链接: utcz.com/z/517923.html

回到顶部