在以前,遇到無限極分類返回乙個節點的所有子孫節點時,我都是用遞迴計算的,後來發現時間複雜度和空間複雜度都太高了,後來自己研究了一下改進了演算法.
節點資料如下:鍵值對分別是自己對應父親節點
<?php以往演算法如下:$tree=array
( 1=>0,
2=>1,
3=>2,
4=>3,
5=>4,
6=>5,
7=>6,
8=>7,
9=>8,
10=>9,
11=>10,
12=>11,
13=>12,
14=>13,
15=>14,
16=>15,
17=>16,
18=>17,
19=>18,
20=>19,
21=>20,
22=>21,
23=>22,
24=>23,
25=>24,
26=>25,
27=>26,
28=>27,
29=>28,
30=>29,
31=>30,
32=>31,
33=>32,
34=>33,
35=>34,
36=>35,
37=>36,
38=>37,
39=>38,
40=>39,
41=>40,
42=>41,
43=>42,
44=>43,
45=>44,
46=>45,
47=>46,
48=>47,
49=>48,
50=>49,
51=>50,
52=>51,
53=>52,
54=>53,
55=>54,
56=>55,
57=>56,
58=>57,
59=>58,
60=>59,
61=>60,
62=>61,
63=>62,
64=>63,
65=>64,
66=>65,
67=>66,
68=>67,
69=>68,
70=>69,
71=>70,
72=>71,
73=>72,
74=>73,
75=>74,
76=>75,
77=>76,
78=>77,
79=>78,
80=>79,
81=>80,
82=>81,
83=>82,
84=>83,
85=>84,
86=>85,
87=>86,
88=>87,
89=>88,
90=>89,
91=>90,
92=>91,
93=>92,
94=>93,
95=>94,
96=>95,
97=>96,
98=>97,
99=>98,
100=>99,//
如果是遞迴的方法 到這一層的時候 就報錯了 可以注釋該層
);?>
<?php結果如圖function get_list($tree,$id=0)
}return
$list;//
返回陣列
}?>
去掉最後一層的那個元素 就可以獲取了。
這說明這樣的演算法在遇到節點層級非常深的時候會崩潰,例如超過100層,php會報錯誤的。後來改進了一種演算法如下:
<?php$id=2;
$new_array=array();//
存放子孫的陣列
$id_list=$id;//
存放父親的陣列
//遍歷所有子孫資料 每次去取已經有的資料的子孫 並把它加入父親陣列
for ($i=1; $i
<= count($tree); $i++)
}}$son_list=array_keys($new_array);//
拿到存放子孫的陣列 取鍵即可
print_r($son_list
);exit
();?>
無限極分類php實現 查子孫樹 家譜樹
1 本文更新日期 2018 05 20 親測可用,在原有基礎上進行增強和 詳細化 2 麵包屑導航 和 子孫樹 效果圖如下 無限級分類中,查家譜樹 麵包屑導航 子孫樹 無限極分類 area array 0 array id 1,cat name 北京市 pid 0 1 array id 2,cat n...
thinkPHP下的無限極分類
無限極分類在php的開發中起到很大的作用,如何是實現乙個無限極分類,有ajax的方法,現在我們用sql語句進行寫。path對應自己的族譜關係。建立的自己的控制器useraction.class.php的index方法 function index dump list this assign list...
php中的無限極分類
1.首先無限極分類對應的表的結構 cate id cate name parentid 預設0 1 鍵盤 0 2 機械鍵盤 1 3 cherry鍵盤 2 這裡面能看出來cherry的parentid的值等於等於他上一級的cate id,這也就是無限極分類的核心 2.無限分類功能就是把資料庫中的資料從...