首頁 >後端開發 >php教程 >CMSPRESS實現無限級分類(附代碼)

CMSPRESS實現無限級分類(附代碼)

php中世界最好的语言
php中世界最好的语言原創
2018-05-17 11:59:111651瀏覽

這次為大家帶來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

3    1

#4     3 ##排序後的資料結構


id ​​ pid  count
1   0    1
3   1   2
4    3   1   2

4    3  

控制器裡呼叫

//默认列表
  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中文網其它相關文章!

推薦閱讀:

PHP延遲靜態綁定使用詳解

#thinkPHP框架自動填入原理與用法使用詳解

以上是CMSPRESS實現無限級分類(附代碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn