CMSPRESS 10行代碼搞定 PHP無(wú)限級(jí)分類2
超級(jí)無(wú)限分類 使用簡(jiǎn)單 效率極高 核心代碼10行不到
另外 求這個(gè)分類的不足,和更高效簡(jiǎn)單的無(wú)限分類方法 ^_^
核心代碼如下
class Tool { static public $treeList = array(); //存放無(wú)限分類結(jié)果如果一頁(yè)面有多個(gè)無(wú)限分類可以使用 Tool::$treeList = array(); 清空 /** * 無(wú)限級(jí)分類 * @access public * @param Array $data //數(shù)據(jù)庫(kù)里獲取的結(jié)果集 * @param Int $pid * @param Int $count //第幾級(jí)分類 * @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[] 保存排序的結(jié)果 基本就是進(jìn)行了一次排序 保存后就可以 unset($data[$key]); 掉 因?yàn)橐呀?jīng)使用不到了
&$data 使用按地址傳參,結(jié)合unset($data[$key]); 減少循環(huán)次數(shù),這樣效率提高了好幾倍,
但需要對(duì) Pid進(jìn)行 ASC的排序 不然會(huì)顯示不完全
$value['Count'] = $count; 為當(dāng)前的等級(jí) 在模板里會(huì)通過(guò)等級(jí)進(jìn)行生成樹形結(jié)構(gòu)
排序前后的數(shù)據(jù)結(jié)構(gòu)如下
表所需要字段 Id,Pid
排序前的數(shù)據(jù)結(jié)構(gòu)
id pid
1 0
2 0
3 1
4 3
排序后的數(shù)據(jù)結(jié)構(gòu)
id pid count
1 0 1
3 1 2
4 3 3
2 0 1
//默認(rèn)列表 public function index() { $menu = M('Menu'); $list = $menu->order('Pid ASC,Morder DESC,Id ASC')->select(); $this->assign('List',Tool::tree($list)); $this->display(); }
控制器里調(diào)用
<td style="text-indent:<{$vo['Count']*20}>px;"><neq name="vo.Count" value="1">| -- </neq><{$vo.Name}></td>
模板使用里<volist> 正常輸出即可 把需要生成樹結(jié)構(gòu)的字段 修改成如上
測(cè)試了 如果是3000條的話 用時(shí) 0.5秒 1000個(gè)的話 0.02秒的左右 超過(guò)3000效率就會(huì)大幅度降低 2000左右的效率還是比較高的 沒有進(jìn)行更詳細(xì)的測(cè)試
如果哪位大哥測(cè)試了 麻煩把測(cè)試結(jié)果回復(fù)下哈
相關(guān)文章
PHP取整函數(shù):ceil,floor,round,intval的區(qū)別詳細(xì)解析
以下是對(duì)PHP中的取整函數(shù):ceil,floor,round,intval的區(qū)別進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08PHP基于ORM方式操作MySQL數(shù)據(jù)庫(kù)實(shí)例
這篇文章主要介紹了PHP基于ORM方式操作MySQL數(shù)據(jù)庫(kù),結(jié)合具體實(shí)例形式分析了php針對(duì)mysql數(shù)據(jù)庫(kù)常用操作的封裝與使用技巧,需要的朋友可以參考下2017-06-06thinkphp框架下實(shí)現(xiàn)登錄、注冊(cè)、找回密碼功能
這篇文章主要介紹了thinkphp框架下實(shí)現(xiàn)登錄、注冊(cè)、找回密碼功能的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-04-04PHP實(shí)現(xiàn)將HTML5中Canvas圖像保存到服務(wù)器的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)將HTML5中Canvas圖像保存到服務(wù)器的方法,可實(shí)現(xiàn)將Canvas圖像保存到服務(wù)器的功能,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11PHP中使用foreach和引用導(dǎo)致程序BUG的問(wèn)題介紹
PHP 引用有些類似 C 語(yǔ)言指針, 但一些重要的特性和 C 語(yǔ)言指針不一樣, 如果不注意, 會(huì)導(dǎo)致程序 BUG. foreach 操作的是數(shù)組或?qū)ο蟮目截? 但 PHP5, 可以使用引用操作對(duì)象元素本身2012-09-09php include和require的區(qū)別深入解析
本篇文章是對(duì)php中include與require的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP進(jìn)階學(xué)習(xí)之反射基本概念與用法分析
這篇文章主要介紹了PHP進(jìn)階學(xué)習(xí)之反射基本概念與用法,結(jié)合實(shí)例形式分析了php反射的概念、原理基本用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-06-06