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

ThinkPHP 實現遞歸無限級分類(極簡代碼)

     編輯:PHP 相關知識

ThinkPHP 實現遞歸無限級分類(極簡代碼)

利用 ThinkPHP 的模型查詢與遞歸函數,僅需十幾行代碼即可實現無限級分類下拉選單。本範例以商品分類為例,展示如何從資料庫讀取層級結構並生成帶縮排的 <option> 選項。

核心函數 recursiveAssort()

/**
 * 無限級遞歸分類
 * @param int $assortPid 父級分類 ID
 * @param string $tag 層級縮排符號(預設空)
 * @return string HTML option 字串
 */
function recursiveAssort($assortPid, $tag = '') {
    $assort = M('goods_class')
        ->where("class_pid = $assortPid")
        ->field('class_id, class_name')
        ->select();

    $tree = '';
    foreach ($assort as $value) {
        $tree .= '<option value="' . $value['class_id'] . '">' . $tag . $value['class_name'] . '</option>';
        $tree .= recursiveAssort($value['class_id'], $tag . ' ');
    }
    return $tree;
}

使用方式

在控制器或視圖中呼叫:

<select name="category">
    <?php echo recursiveAssort(0); ?>
</select>

即可生成完整的分類樹狀下拉選單,頂層分類無縮排,子層級以  (全形空格)遞增縮排。

資料表結構建議

欄位型別說明
class_idint主鍵,自增
class_namevarchar分類名稱
class_pidint父級 ID,頂層為 0

優化建議

  • 大量分類時建議一次性讀取所有資料至陣列,再以引用方式構建樹,減少資料庫查詢次數
  • 結果可快取至檔案或 Redis,避免重複遞歸運算
  • 若需輸出 <ul><li> 結構,只需調整字串拼接邏輯

此極簡實作非常適合中小型專案快速導入,代碼清晰易維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved