PHP 無(wú)限極分類

概述

??在實(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 '&emsp;&emsp;';
        }
        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ú)限極分類
php 無(wú)限極分類
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拼卵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蛮艰,更是在濱河造成了極大的恐慌腋腮,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壤蚜,死亡現(xiàn)場(chǎng)離奇詭異即寡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)袜刷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門聪富,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人著蟹,你說(shuō)我怎么就攤上這事墩蔓。” “怎么了萧豆?”我有些...
    開(kāi)封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵奸披,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我炕横,道長(zhǎng)源内,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任份殿,我火速辦了婚禮膜钓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卿嘲。我一直安慰自己颂斜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布拾枣。 她就那樣靜靜地躺著沃疮,像睡著了一般盒让。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上司蔬,一...
    開(kāi)封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天邑茄,我揣著相機(jī)與錄音,去河邊找鬼俊啼。 笑死肺缕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的授帕。 我是一名探鬼主播同木,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼跛十!你這毒婦竟也來(lái)了彤路?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤芥映,失蹤者是張志新(化名)和其女友劉穎洲尊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體屏轰,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颊郎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霎苗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榛做,死狀恐怖唁盏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情检眯,我是刑警寧澤厘擂,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站锰瘸,受9級(jí)特大地震影響刽严,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜避凝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一舞萄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧管削,春花似錦倒脓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)甘晤。三九已至,卻和暖如春饲做,著一層夾襖步出監(jiān)牢的瞬間线婚,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工盆均, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酌伊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓缀踪,卻偏偏與公主長(zhǎng)得像居砖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驴娃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 什么是無(wú)限分類奏候? 無(wú)限分類就是一個(gè)分類下面可以創(chuàng)建多個(gè)子類,而其子類下面亦可以創(chuàng)建不同子類唇敞,如此往復(fù)蔗草,沒(méi)有終點(diǎn); ...
    PHPer_閱讀 1,593評(píng)論 0 3
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,180評(píng)論 25 707
  • PHP 學(xué)習(xí)目錄 ├─PHP視頻教程 1 LAMP網(wǎng)站構(gòu)建 │ ├─PHP教程 1.1.1 新版視頻形式介紹│ ...
    曹淵說(shuō)創(chuàng)業(yè)閱讀 16,157評(píng)論 29 417
  • 記得在我小的時(shí)候,家里物質(zhì)條件很匱乏旷档,許久才可以吃一頓肉模叙。更別提什么零食點(diǎn)心了,那些東西到過(guò)節(jié)過(guò)年才有鞋屈。 有一次過(guò)...
    作家二美閱讀 564評(píng)論 12 17
  • 一天面試兩個(gè)都被拒了厂庇,還有個(gè)說(shuō)我在上家公司待太久了(6年)簡(jiǎn)歷上都有寫渠啊,不滿意為啥還叫我去面試!另外一個(gè)獵頭也是通...
    木霞閱讀 445評(píng)論 0 0