php實現無限級分類實現代碼(遞迴方法)

來源:互聯網
上載者:User

開始以為這樣的功能似乎很難,之前也做過一個百科的東西,其中也涉及到了分類的功能,不過不是無限級的分類,而是簡單的實現了固定的三級分類,當時是自己設計的,想在想起來實現方法太土了,其實三級分類也只是無限級分類的一種特殊情況而已嘛。經過一段時間考慮,已經有了一些眉目,到網上一查,原來這樣的東西鋪天蓋地,呵呵。其實無限級下拉式清單功能是很簡單的,無非就是用一個遞迴演算法就好啦。
首先要設計資料庫,需要建一個表,裡面存放裝置分類資訊,至少需要3個欄位,第一個是主鍵(ID),第二個是父級分類ID(parentid),第三個是分類的名稱(classname)。可能的一種效果是:
ID PARENTID CLASSNAME
1 0 一級分類A
2 0 一級分類B
3 1 二級分類A
4 1 二級分類B
主要思路:首先看第三行和第四行,父類ID(PARENTID)的值是1,表示屬於id=1這個類的子類,而,一,二兩行因為是一級分類,沒有上級分類,所以父類ID(PARENTID)的值是0,表示初級分類,依次類推便實現了無限級分類。最終的效果是:
├一級分類A
├─┴二級分類A
├─┴二級分類B
├一級分類B
然後就是程式,這裡以PHP作為描述語言,可以很方便的改成其他語言,因為原理相似,就是一個遞迴而已。 複製代碼 代碼如下:<?php
$dbhost = "localhost"; // 資料庫主機名稱
$dbuser = "root"; // 資料庫使用者名稱
$dbpd = "123456"; // 資料庫密碼
$dbname = "test"; // 資料庫名
mysql_connect($dbhost,$dbuser,$dbpd); //串連主機
mysql_select_db($dbname); //選擇資料庫
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)) {
// 縮排顯示節點名稱
echo $tag.$row['classname'] . "<br/>";
//再次調用這個函數顯示子節點的子節點
display_tree($tag."─┴",$row['id']);
}
}
?>

這樣遞迴方法,對於大量的子欄目是個負擔,一些成熟的cms系統。都是生產數組方便調用,也能大幅的提高效率。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.