PHP實(shí)現(xiàn)無限極分類生成分類樹的方法
本文實(shí)例講述了PHP實(shí)現(xiàn)無限極分類生成分類樹的方法。分享給大家供大家參考,具體如下:
現(xiàn)在的分類數(shù)據(jù)庫設(shè)計基本都是:每一個分類有一個id主鍵字段,一個pid指向父類的id,這樣便可實(shí)現(xiàn)無限級分類,取出的數(shù)據(jù)就是如下的格式:
$arr = array(
array("id" => 1 , "pid" => 0 , 'cat' => '欄目一'),
array("id" => 2 , "pid" => 0 , 'cat' => '欄目二'),
array("id" => 3 , "pid" => 1 , 'cat' => '欄目三'),
array("id" => 4 , "pid" => 2 , 'cat' => '欄目四'),
array("id" => 5 , "pid" => 1 , 'cat' => '欄目五'),
array("id" => 6 , "pid" => 5 , 'cat' => '欄目六'),
array("id" => 7 , "pid" => 5 , 'cat' => '欄目七'),
array("id" => 8 , "pid" => 6 , 'cat' => '欄目八'),
array("id" => 9 , "pid" => 1 , 'cat' => '欄目九'),
array("id" => 10 , "pid" => 0 , 'cat' => '欄目十'),
array("id" => 11 , "pid" => 10 , 'cat' => '欄目十一'),
array("id" => 12 , "pid" => 11 , 'cat' => '欄目十二'),
array("id" => 13 , "pid" => 2 , 'cat' => '欄目十三'),
array("id" => 14, "pid" => 13 , 'cat' => '欄目十四')
);
不多說,直接上處理代碼:
//生成無限極分類樹
function make_tree($arr){
$refer = array();
$tree = array();
foreach($arr as $k => $v){
$refer[$v['id']] = & $arr[$k]; //創(chuàng)建主鍵的數(shù)組引用
}
foreach($arr as $k => $v){
$pid = $v['pid']; //獲取當(dāng)前分類的父級id
if($pid == 0){
$tree[] = & $arr[$k]; //頂級欄目
}else{
if(isset($refer[$pid])){
$refer[$pid]['subcat'][] = & $arr[$k]; //如果存在父級欄目,則添加進(jìn)父級欄目的子欄目數(shù)組中
}
}
}
return $tree;
}
測試運(yùn)行:
$cat = make_tree($arr); print_r($cat);
運(yùn)行結(jié)果:
Array
(
[0] => Array
(
[id] => 1
[pid] => 0
[cat] => 欄目一
[subcat] => Array
(
[0] => Array
(
[id] => 3
[pid] => 1
[cat] => 欄目三
)
[1] => Array
(
[id] => 5
[pid] => 1
[cat] => 欄目五
[subcat] => Array
(
[0] => Array
(
[id] => 6
[pid] => 5
[cat] => 欄目六
[subcat] => Array
(
[0] => Array
(
[id] => 8
[pid] => 6
[cat] => 欄目八
)
)
)
[1] => Array
(
[id] => 7
[pid] => 5
[cat] => 欄目七
)
)
)
[2] => Array
(
[id] => 9
[pid] => 1
[cat] => 欄目九
)
)
)
[1] => Array
(
[id] => 2
[pid] => 0
[cat] => 欄目二
[subcat] => Array
(
[0] => Array
(
[id] => 4
[pid] => 2
[cat] => 欄目四
)
[1] => Array
(
[id] => 13
[pid] => 2
[cat] => 欄目十三
[subcat] => Array
(
[0] => Array
(
[id] => 14
[pid] => 13
[cat] => 欄目十四
)
)
)
)
)
[2] => Array
(
[id] => 10
[pid] => 0
[cat] => 欄目十
[subcat] => Array
(
[0] => Array
(
[id] => 11
[pid] => 10
[cat] => 欄目十一
[subcat] => Array
(
[0] => Array
(
[id] => 12
[pid] => 11
[cat] => 欄目十二
)
)
)
)
)
)
如果大家需要這樣的組裝格式,或者需要該格式方便后續(xù)的處理,可以嘗試此方法
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
相關(guān)文章
php 服務(wù)器調(diào)試 Zend Debugger 的安裝教程
調(diào)試技術(shù)是我們編程中不可或缺的重要部分,調(diào)試器是每個IDE環(huán)境都必備的組件。既然如此,Zend Studio的集成環(huán)境擁有一個調(diào)試器也就是理所當(dāng)然的事情了,但是,該調(diào)試器在配置使用起來,其顯示出來的強(qiáng)勁功能一定會讓你驚嘆不已!2009-09-09
PHP MySQL應(yīng)用中使用XOR運(yùn)算加密算法分享
本文將介紹一個簡單易用的加密/解密算法:使用異或(XOR)運(yùn)算。本算法原理簡單,旨在使讀者對信息的加密/解密有一個更加直觀的印象。2011-08-08
php基于curl主動推送最新內(nèi)容給百度收錄的方法
這篇文章主要介紹了php基于curl主動推送最新內(nèi)容給百度收錄的方法,分析了百度鏈接的提交方式及curl主動推送的實(shí)現(xiàn)方法,需要的朋友可以參考下2016-10-10
php使用Jpgraph創(chuàng)建3D餅形圖效果示例
這篇文章主要介紹了php使用Jpgraph創(chuàng)建3D餅形圖效果,結(jié)合實(shí)例形式分析了php基于Jpgraph繪制圖形的原理、實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-02-02
PHP獲取鏈表中倒數(shù)第K個節(jié)點(diǎn)的方法
這篇文章主要介紹了PHP獲取鏈表中倒數(shù)第K個節(jié)點(diǎn)的方法,涉及php針對鏈表的遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
linux php mysql數(shù)據(jù)庫備份實(shí)現(xiàn)代碼
想在PHP后臺管理直接能夠備份數(shù)據(jù)庫,于是想呀想,一直沒有什么思路,一開始是考慮用php來訪問服務(wù)器安裝mysql的目錄,比如 /usr/local/mysql/data目錄,直接把下面對應(yīng)的文件進(jìn)行備份2009-03-03

