|
首先要設(shè)計(jì)數(shù)據(jù)庫(kù),需要建一個(gè)表,里面存儲(chǔ)分類信息,至少需要3個(gè)字段,第一個(gè)是主鍵(ID),第二個(gè)是父級(jí)分類ID(parentid),第三個(gè)是分類的名稱(classname)。可能的一種效果是:
ID PARENTID CLASSNAME
1 0 一級(jí)分類A
2 0 一級(jí)分類B
3 1 二級(jí)分類A
4 1 二級(jí)分類B
主要思路:首先看第三行和第四行,父類ID(PARENTID)的值是1,表示屬于id=1這個(gè)類的子類,而,一,二兩行因?yàn)槭且患?jí)分類,沒(méi)有上級(jí)分類,所以父類ID(PARENTID)的值是0,表示初級(jí)分類,依次類推便實(shí)現(xiàn)了無(wú)限級(jí)分類。最終的效果是:
├一級(jí)分類A
├─┴二級(jí)分類A
├─┴二級(jí)分類B
├一級(jí)分類B
然后就是程序,這里以php作為描述語(yǔ)言,可以很方便的改成其他語(yǔ)言,因?yàn)樵硐嗨疲褪且粋€(gè)遞歸而已。
復(fù)制代碼 代碼如下:
<?php
$dbhost = "localhost"; // 數(shù)據(jù)庫(kù)主機(jī)名
$dbuser = "root"; // 數(shù)據(jù)庫(kù)用戶名
$dbpd = "123456"; // 數(shù)據(jù)庫(kù)密碼
$dbname = "test"; // 數(shù)據(jù)庫(kù)名
mysql_connect($dbhost,$dbuser,$dbpd); //連接主機(jī)
mysql_select_db($dbname); //選擇數(shù)據(jù)庫(kù)
mysql_query("SET NAMES 'utf8'");
display_tree("├",0);
function display_tree($tag,$classid) {
$result = mysql_query("
SELECT *
FROM ylmf_class
WHERE parentid = '" . $classid . "'
;"
);
while ($row = mysql_fetch_array($result)) {
// 縮進(jìn)顯示節(jié)點(diǎn)名稱
echo $tag.$row['classname'] . "<br/>";
//再次調(diào)用這個(gè)函數(shù)顯示子節(jié)點(diǎn)的子節(jié)點(diǎn)
display_tree($tag."─┴",$row['id']);
}
}
?>
這樣遞歸方法,對(duì)于大量的子欄目是個(gè)負(fù)擔(dān),一些成熟的cms系統(tǒng)。都是生產(chǎn)數(shù)組方便調(diào)用,也能大幅的提高效率。
php技術(shù):php實(shí)現(xiàn)無(wú)限級(jí)分類實(shí)現(xiàn)代碼(遞歸方法),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。