概述
??在實(shí)際工作中,經(jīng)常要用到無(wú)限極分類苍在。如導(dǎo)航表等等绝页。到網(wǎng)上一搜php無(wú)限極分類,很多寂恬,但好多都是一個(gè)续誉,并且,寫的很亂初肉,代碼很多酷鸦,那些都不靠譜,還是自己搗鼓搗鼓無(wú)限極分類了。下面介紹兩種無(wú)限極分類:遞歸
井佑,使用引用
數(shù)據(jù)準(zhǔn)備
//初始化原始數(shù)據(jù)(id=>編號(hào)属铁,name=>顯示名稱,pid=>父級(jí)目錄id,sort=>排序順序)
$data[1] = array('id'=>'1','name'=>'一級(jí)目錄A','pid'=>'0','sort'=>'1');
$data[2] = array('id'=>'2','name'=>'一級(jí)目錄B','pid'=>'0','sort'=>'2');
$data[3] = array('id'=>'3','name'=>'一級(jí)目錄C','pid'=>'0','sort'=>'3');
$data[4] = array('id'=>'4','name'=>'一級(jí)目錄D','pid'=>'0','sort'=>'4');
$data[5] = array('id'=>'5','name'=>'二級(jí)目錄A-1','pid'=>'1','sort'=>'1');
$data[6] = array('id'=>'6','name'=>'二級(jí)目錄A-2','pid'=>'1','sort'=>'2');
$data[7] = array('id'=>'7','name'=>'二級(jí)目錄A-3','pid'=>'1','sort'=>'3');
$data[8] = array('id'=>'8','name'=>'二級(jí)目錄B-1','pid'=>'2','sort'=>'1');
$data[9] = array('id'=>'9','name'=>'二級(jí)目錄B-2','pid'=>'2','sort'=>'2');
$data[10] = array('id'=>'10','name'=>'二級(jí)目錄B-3','pid'=>'2','sort'=>'3');
$data[11] = array('id'=>'11','name'=>'二級(jí)目錄C-1','pid'=>'3','sort'=>'2');
$data[12] = array('id'=>'12','name'=>'二級(jí)目錄D-1','pid'=>'4','sort'=>'1');
$data[13] = array('id'=>'13','name'=>'二級(jí)目錄D-2','pid'=>'4','sort'=>'2');
$data[14] = array('id'=>'14','name'=>'三級(jí)目錄A-2-1','pid'=>'6','sort'=>'1');
$data[15] = array('id'=>'15','name'=>'三級(jí)目錄A-2-2','pid'=>'6','sort'=>'2');
$data[16] = array('id'=>'16','name'=>'三級(jí)目錄C-1-1','pid'=>'11','sort'=>'1');
$data[17] = array('id'=>'17','name'=>'三級(jí)目錄B-2-1','pid'=>'9','sort'=>'2');
先寫一個(gè)顯示樹(shù)結(jié)構(gòu)的函數(shù)
function printTree($data,$level=0){
foreach($data as $key=>$value){
for($i=0;$i<=$level;$i++){
echo '  ';
}
echo $value['name'];
echo '<br>';
if(!empty($value['children'])){
printTree($value['children'],$level+1);
}
}
}
遞歸-無(wú)限極分類
使用遞歸的方式獲取無(wú)限極分類數(shù)組
function getNodeTree(&$list,&$tree,$pid=0){
foreach($list as $key=>$value){
if($pid == $value['pid']){
$tree[$value['id']]=$value;
unset($list[$key]);
getNodeTree($list,$tree[$value['id']]['children'],$value['id']);
}
}
}
使用引用-無(wú)限極分類
function createNodeTree(&$list,&$tree){
foreach($list as $key=>$node){
if(isset($list[$node['pid']])){
$list[$node['pid']]['children'][] = &$list[$key];
}else{
$tree[] = &$list[$node['id']];
}
}
}
果然是厲害躬翁,代碼簡(jiǎn)潔精煉焦蘑,無(wú)需遞歸,執(zhí)行速度快盒发。這是我偶然在一個(gè)網(wǎng)站上看到的例嘱,覺(jué)得很實(shí)用就收藏下來(lái),分享給大家宁舰。
網(wǎng)站地址為:http://www.phpddt.com/php/generateTree.html
調(diào)用
//遞歸-無(wú)限極分類調(diào)用
getNodeTree($data,$tree);
printTree($tree);
//使用引用-無(wú)限極分類調(diào)用
createNodeTree($data,$tree);
printTree($tree);
結(jié)果
php 無(wú)限極分類