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

ThinkPHP 實現無限級遞歸分類下拉選單

     編輯:PHP 相關知識

ThinkPHP 實現無限級遞歸分類下拉選單

在電商、CMS 等系統中,商品分類、文章分類常需無限級樹狀結構。利用 ThinkPHP 的 M() 模型與遞歸函數,即可快速生成帶縮進層級的 <option> 選項。

核心遞歸函數

/**
 * 無限級遞歸分類
 * @param int $assortPid 父級分類 ID
 * @param string $tag 層級縮進符號(預設 &emsp;)
 * @return string 生成的 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 . '&emsp;');
    }
    return $tree;
}

使用方式

在控制器或視圖中調用:

// 獲取頂級分類樹(pid=0)
$categoryTree = recursiveAssort(0);
// 直接輸出到 select 標籤
echo '<select name="category">' . $categoryTree . '</select>';

優化建議

  • 若分類數據量大,建議一次性查出所有分類到陣列,在 PHP 端遞歸組裝,減少資料庫查詢次數。
  • 緩存生成的 HTML 片段,避免重複遞歸計算。
  • 若需支援拖拽排序、編輯,前端可配合 jsTree 等樹狀組件,後端提供 JSON 格式樹結構。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved