這次為大家帶來CMSPRESS實現無限級分類(附代碼),CMSPRESS實現無限級分類的注意事項有哪些,下面就是實戰案例,一起來看一下。
超級無限分類 使用簡單效率極高核心程式碼10行不到
另外求這個分類的不足,和更有效率簡單的無限分類方法^_^
#核心程式碼如下
class Tool { static public $treeList = array(); //存放无限分类结果如果一页面有多个无限分类可以使用 Tool::$treeList = array(); 清空 /** * 无限级分类 * @access public * @param Array $data //数据库里获取的结果集 * @param Int $pid * @param Int $count //第几级分类 * @return Array $treeList */ static public function tree(&$data,$pid = 0,$count = 1) { foreach ($data as $key => $value){ if($value['Pid']==$pid){ $value['Count'] = $count; self::$treeList []=$value; unset($data[$key]); self::tree($data,$value['Id'],$count+1); } } return self::$treeList ; } }
$treeList[] 儲存排序的結果基本上就是進行了一次排序保存後就可以unset($data[$key]); 掉因為已經使用不到了
&$data 使用按地址傳參,結合unset($data[$key]); 減少循環次數,這樣效率提高了好幾倍,
但需要對Pid進行ASC的排序不然會顯示不完全
$value['Count'] = $count; 為目前的等級在範本裡會透過等級進行產生樹狀結構
排序前後的資料結構如下
表格所需要欄位Id,Pid
排序前的資料結構
id pid
1 0
2 0
3 1
4 0
#4 3 ##排序後的資料結構
id pid count
1 0 1
3 1 2
4 3 1 2
控制器裡呼叫
//默认列表 public function index() { $menu = M('Menu'); $list = $menu->order('Pid ASC,Morder DESC,Id ASC')->select(); $this->assign('List',Tool::tree($list)); $this->display(); }
範本使用裡3da5ee660f26a047cce0b9503e43e613 正常輸出即可把需要產生樹結構的欄位修改成如上
測試如果是3000條的話用時0.5秒1000個的話0.02秒的左右超過3000效率就會大幅度降低2000左右的效率還是比較高的沒有進行更詳細的測試
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
以上是CMSPRESS實現無限級分類(附代碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!