在電商、CMS 等系統中,商品分類、文章分類常需無限級樹狀結構。利用 ThinkPHP 的 M() 模型與遞歸函數,即可快速生成帶縮進層級的 <option> 選項。
/**
* 無限級遞歸分類
* @param int $assortPid 父級分類 ID
* @param string $tag 層級縮進符號(預設  )
* @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 . ' ');
}
return $tree;
}
在控制器或視圖中調用:
// 獲取頂級分類樹(pid=0) $categoryTree = recursiveAssort(0); // 直接輸出到 select 標籤 echo '<select name="category">' . $categoryTree . '</select>';