php 取多级分类,php – 获取所有类别(多级)
解決問題的最簡單方法是添加遞歸.
public function getCategoryTreeForParentId($parent_id = 0) {
$categories = array();
$this->db->from('categories');
$this->db->where('parent_id', $parent_id);
$result = $this->db->get()->result();
foreach ($result as $mainCategory) {
$category = array();
$category['id'] = $mainCategory->id;
$category['name'] = $mainCategory->name;
$category['parent_id'] = $mainCategory->parent_id;
$category['sub_categories'] = $this->getCategoryTreeForParentId($category['id']);
$categories[$mainCategory->id] = $category;
}
return $categories;
}
通過預加載所有類別并在陣列上操作,可以大大提高此方法,從而跳過每個新parent_id的查詢.
我也沒有使用codeigniter的對象,因為我不知道它們.如果它們支持魔術setter / getter或者可以說服它們獲取一系列子對象,那么應該使用它們來代替我在這里構建的數組.
算法的作用是:使用給定的parent_id加載所有類別,遍歷所有這些類別,將iteration-category-id假設為parent_id并為其加載所有內容.
這有效地加載所有類別,只要它們引用現有類別.
涉及到一個輕微的危險:當您構建類別A和B時,其中A將B作為父級,B將A作為父級,您將遇到無限循環,因為它們會一次又一次地相互加載.這會強制您在數據中使用干凈的樹結構.
更新
因為這仍然得到了回報:
有關此實施的另一個建議.
如果您的類別樹更大或具有多個級別,則可能會遇到性能問題,因為此實現會使用新的查詢參數一次又一次地加載類別.這很容易導致數十,數百或數千個查詢,具體取決于您的類別樹.
一種更有效的方法是從類別表中加載所有類別(使用一個查詢),并在應用程序中使用遞歸對它們進行排序.這是極少數情況之一,早期評估確實可以提高性能.
如果在同一個請求中需要多次樹,那么甚至可以通過靜態變量添加緩存(具有緩存的所有常見危險).
總結
以上是生活随笔為你收集整理的php 取多级分类,php – 获取所有类别(多级)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php获取函数里参数吗,php函数中获取
- 下一篇: 住房贷款额度计算公式