首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP MySQL 無限級分類樹狀顯示:遞歸算法實作

     編輯:PHP 相關知識

無限級分類核心設計:資料表儲存父分類 ID (father_id) 與路徑 (path),透過遞歸函數生成樹狀結構。

資料表結構

CREATE TABLE `sort` (
    `id` INT PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(50) NOT NULL,
    `father_id` INT DEFAULT 0,
    `path` VARCHAR(255) DEFAULT '', -- 祖先 ID 集合,如 "0,1,3"
    `isdir` TINYINT DEFAULT 1 -- 1=目錄, 0=文件/葉子節點
);

遞歸顯示函數

function sort_list($str, $fatherid, $count) {
    $rs = $this->sql->re_datas("SELECT * FROM sort WHERE father_id = $fatherid");
    $num = $this->sql->sql_numrows();
    for ($i = 0; $i < $num; $i++) {
        $name = "";
        for ($n = 1; $n < $count; $n++) $name .= "│ ";
        $name .= ($i == $num - 1) ? "└─" : "├─";
        $name .= $rs[$i]['name'];

        if ($rs[$i]['isdir']) {
            $str .= "<span style='color:#CCC'>$name</span>";
        } else {
            $str .= $name;
        }
        $str = $this->sort_list($str, $rs[$i]['id'], $count + 1);
    }
    return $str;
}

調用方式

$sort_list = "";
$sort_list = $this->sort_list($sort_list, 0, 1);
echo $sort_list;

優化建議

  • 大量資料遞歸深度過大可能導致堆疊溢位,可改用「左/右值編碼」或「路徑枚舉」非遞歸查詢。
  • 前端渲染建議輸出 JSON,由 JavaScript (如 zTree, jstree) 負責樹狀展開/摺疊。
  • 資料庫索引:INDEX (father_id)、INDEX (path)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved