面試的時候被問到無限極分類的設計和實現,比較常見的做法是在建表的時候,增加乙個pid欄位用來區別自己所屬的分類
資料在資料庫中儲存大概是這個樣子,怎麼實現無限極遞迴呢,有兩種常用的做法,遞迴和引用演算法
遞迴演算法`
$array
=array
(array
('id'
=>1,
'pid'
=>0,
'name'
=>
'河北省'),
array
('id'
=>2,
'pid'
=>0,
'name'
=>
'北京市'),
array
('id'
=>3,
'pid'
=>1,
'name'
=>
'邯鄲市'),
array
('id'
=>4,
'pid'
=>2,
'name'
=>
'朝陽區'),
array
('id'
=>5,
'pid'
=>2,
'name'
=>
'通州區'),
array
('id'
=>6,
'pid'
=>4,
'name'
=>
'望京'),
array
('id'
=>7,
'pid'
=>4,
'name'
=>
'酒仙橋'),
array
('id'
=>8,
'pid'
=>3,
'name'
=>
'永年區'),
array
('id'
=>9,
'pid'
=>1,
'name'
=>
'武安市'),
);/** * 遞迴實現無限極分類
* @param $array 分類資料
* @param $pid 父id
* @param $level 分類級別
* @return $list 分好類的陣列 直接遍歷即可 $level可以用來遍歷縮排
*/function
gettree
($array
,$pid=0
,$level=0
)}return
$list;}
/* * 獲得遞迴完的資料,遍歷生成分類
*/$array
=gettree
($array);
//處理樣式,進行分級
foreach
($array
as$value
)
列印結果
河北省–邯鄲市
----永年區
–武安市
北京市–朝陽區
----望京
----酒仙橋
–通州區
php遞迴實現無限極分類
一 陣列 categories array array id 1,name 陝西 parent id 0 array id 2,name 西安 parent id 1 array id 3,name 長安區 parent id 2 array id 4,name 河南 parent id 0 arr...
php實現無限極分類
利用兩個for迴圈實現無限級分類 表 欄位名字段型別 備註預設值 idint 主鍵 auto increment name varchar 分類名稱 pidint 父類id0 頂級分類的 pid 預設就是0了。當我們想取出某個分類的子分類樹的時候,基本思路就是遞迴,當然,出於效率問題不建議每次遞迴都...
PHP實現無限極分類
created by epp4.user t470 date 15 08 08 time 上午12 00 準備陣列,代替從資料庫中檢索出的資料 共有三個必須欄位id,name,pid header content type text html charset utf 8 categories arr...