CodeIgniter(簡稱 CI)是一個輕量級且功能強大的 PHP 框架,基於 MVC 設計模式構建。它提供豐富的類庫、簡單易學的語法以及高效的執行效能,是許多 PHP 開發者的首選框架之一。
無限級分類是指分類層級不受限制,可無限延伸的分類結構。在資料庫中通常採用「父子關係」儲存:每條記錄包含 cat_id(自身 ID)與 parent_id(父級 ID),頂層分類的 parent_id 為 0。透過遞歸演算法即可將扁平資料轉換為樹狀結構。
// 無限級分類 + 遞歸
public function digui() {
$crr = $this->db->get('category')->result_array();
$list['type'] = $this->nolimit($crr, 0, 0);
$this->load->view('list1', $list);
}
public function nolimit($crr, $p_id, $level) {
static $arr = array();
foreach ($crr as $v) {
if ($v['parent_id'] == $p_id) {
$v['level'] = $level;
$arr[] = $v;
$this->nolimit($crr, $v['cat_id'], $level + 1);
}
}
return $arr;
}
關鍵點說明:
static $arr 靜態變量累積結果,避免多次遞歸返回值合併的效能損耗$level 參數記錄當前層級,便於前端縮進顯示$crr),遞歸在記憶體中處理,減少資料庫查詢次數<td><?php echo str_repeat(' ', $val['level']) ?><?php echo $val['cat_name'] ?></td>
// 獲取 1~3 級分類
public function sel_child($p_id) {
$arr = $this->sel_son($p_id);
foreach ($arr as $k => $v) {
$tmp = $this->sel_son($v['cat_id']);
foreach ($tmp as $kk => $vv) {
$tmp2 = $this->sel_son($vv['cat_id']);
$tmp[$kk]['childs'] = $tmp2;
}
$arr[$k]['child'] = $tmp;
}
return $arr;
}
public function sel_son($id) {
$this->db->where("parent_id=$id");
return $this->db->get(self::$cate)->result_array();
}
<?php foreach ($type as $v) { ?>
<li id="cat_1" class="">
<h3><a href=""><?php echo $v['cat_name'] ?></a></h3>
<?php foreach ($v['child'] as $vv) { ?>
<dl class="clearfix">
<dt><a href=""><?php echo $vv['cat_name'] ?></a></dt>
<?php foreach ($vv['childs'] as $vvv) { ?>
<a href=""><?php echo $vvv['cat_name'] ?></a>
<?php } ?>
</dl>
<?php } ?>
</li>
<?php } ?>
path 欄位(如 0,1,5,12),查詢子孫/祖先只需 LIKE '0,1,5,%',極大提升查詢效能CodeIgniter 實現無限級分類的核心在於「一次查詢 + 記憶體遞歸組裝」。本文提供的 nolimit() 方法結構清晰、效能優異,適合中小型專案直接使用。大型專案建議結合快取策略或改用路徑枚舉法優化資料庫層面的查詢效能。