相信很多學php的很多小伙伴都會嘗試做一個網上商城作為提升自己技術的一種途徑。各種對商品分類,商品名之類的操作應該是得心應手,那么就可以嘗試下無限級分類列表的制作了。
無限級分類是一種分類技巧,例如部門組織,文章分類,學科分類等常用到無限級分類,將其簡單理解成分類就好了。其實我們仔細想一下,生活中的分類簡直太多了,衣服可以分為男裝和女裝,也可以分為上衣和褲子,也可以根據年齡段分類。分類無處不在,分類顯得“無限”。我這里就不說無限分類的必要性了。
無限分類看似"高大上",實際上原理是非常簡單的 。無限分類不僅僅需要代碼的巧妙性,也要依托數據庫設計的合理性。要滿足無限級分類,數據庫需要有兩個必須的字段,id,pid。id用來標識自身,而pid則是用來表明父級id。也就是說,每個分類記錄不僅描述了自身,還描述了與其關心最為緊密的另一個id。看似復雜的事情被這樣一個小技巧解決了。
php無限級分類是經常要用到的,本人以前一直用的是已經寫好的,所以沒仔細去研究過,下面是一個使用遞歸實現的簡單的php無限級分類的函數;也許這不是最優的方法,但對于一般的應用也足夠了。
INSERT INTO `category` (`id`, `pid`, `sort`, `name`) VALUES
(1, 0, 1, 'php'),
(2, 0, 2, '數據庫'),
(3, 0, 3, 'javascript'),
(4, 1, 1, '框架模板'),
(5, 1, 2, '函數總結'),
(6, 2, 1, 'mysql'),
(7, 4, 1, '框架'),
(8, 4, 2, '模板'),
(9, 8, 1, 'smarty'),
(10, 7, 2, 'thinkphp'),
(11, 10, 1, 'thinkphp技巧'),
(12, 10, 2, 'thinkphp模板'),
(13, 12, 3, '模板知識總結'),
(14, 12, 2, '模板視頻教程'),
(15, 11, 1, 'model技巧');
function tree($list,$pid=0,$level=0,$html='--'){
static $tree=array();
foreach($list as $v){
if($v['pid']==$pid){
$v['level']=$level;
$v['html']=str_repeat($html,$level);
$tree[]=$v;
tree($list,$v['id'],$level+1,$html);
}
}
return $tree;
}