php根据分类生成网址,PHP实现无限极分类生成分类树的方法
本文實例講述了PHP實現(xiàn)無限極分類生成分類樹的方法。分享給大家供大家參考,具體如下:
現(xiàn)在的分類數(shù)據(jù)庫設(shè)計基本都是:每一個分類有一個id主鍵字段,一個pid指向父類的id,這樣便可實現(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]; //如果存在父級欄目,則添加進父級欄目的子欄目數(shù)組中
}
}
}
return $tree;
}
測試運行:
$cat = make_tree($arr);
print_r($cat);
運行結(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é)運算技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
總結(jié)
以上是生活随笔為你收集整理的php根据分类生成网址,PHP实现无限极分类生成分类树的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中如何声明外键约束,外键约束不正
- 下一篇: 电子科大沙河校区有计算机专业,电子科大沙