PHPer無限極分類演算法

2022-06-15 07:06:16 字數 2201 閱讀 2964

無限級分類是開發中常見的情況,也經常會在面試,主考官問到,筆試中遇到,因此本文對常見的無限極分類演算法進行總結歸納,其實大多數就是迭代與遞迴。

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)else

} 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)

} return $tree;

}$tree = generatetree($arr,0,0);

foreach ($tree as $val)

輸出

分析:利用了遞迴,陣列的key值與id值可以不相同,最後以順序的結構輸出陣列

優點:方便遍歷,查詢父子元素

缺點:php不擅長遞迴,資料量大的情況下效率會顯著降低

2021金三銀四大廠面試真題集錦,必看!

四年精華php技術文章整理合集——php框架篇

四年精華php技術文合集——微服務架構篇

四年精華php技術文合集——分布式架構篇

四年精華php技術文合集——高併發場景篇

四年精華php技術文章整理合集——資料庫篇

無限極分類

面試的時候被問到無限極分類的設計和實現,比較常見的做法是在建表的時候,增加乙個pid欄位用來區別自己所屬的分類 array array array id 1,pid 0,name 河北省 array id 2,pid 0,name 北京市 array id 3,pid 1,name 邯鄲市 arra...

無限極分類,遞迴分類

有一組陣列如下 items array 1 array id 1,pid 0,name 江西省 2 array id 2,pid 0,name 黑龍江省 3 array id 3,pid 1,name 南昌市 4 array id 4,pid 2,name 哈爾濱市 5 array id 5,pid...

php無限極分類

無限級分類 param1 array categories,要分類的陣列 param2 int stop id 不需要查詢子分類的id param3 int parent id 0,要查詢父分類id 欄位名稱 param4 int level 0,當前商品分類所屬的層級 根據level計算縮排的距離...