PHP 無限極分類

概述

??在實(shí)際工作中,經(jīng)常要用到無限極分類。如導(dǎo)航表等等。到網(wǎng)上一搜php無限極分類,很多,但好多都是一個(gè),并且,寫的很亂,代碼很多,那些都不靠譜,還是自己搗鼓搗鼓無限極分類了。下面介紹兩種無限極分類:遞歸,使用引用

數(shù)據(jù)準(zhǔn)備

//初始化原始數(shù)據(jù)(id=>編號,name=>顯示名稱,pid=>父級目錄id,sort=>排序順序)
$data[1] = array('id'=>'1','name'=>'一級目錄A','pid'=>'0','sort'=>'1');
$data[2] = array('id'=>'2','name'=>'一級目錄B','pid'=>'0','sort'=>'2');
$data[3] = array('id'=>'3','name'=>'一級目錄C','pid'=>'0','sort'=>'3');
$data[4] = array('id'=>'4','name'=>'一級目錄D','pid'=>'0','sort'=>'4');
$data[5] = array('id'=>'5','name'=>'二級目錄A-1','pid'=>'1','sort'=>'1');
$data[6] = array('id'=>'6','name'=>'二級目錄A-2','pid'=>'1','sort'=>'2');
$data[7] = array('id'=>'7','name'=>'二級目錄A-3','pid'=>'1','sort'=>'3');
$data[8] = array('id'=>'8','name'=>'二級目錄B-1','pid'=>'2','sort'=>'1');
$data[9] = array('id'=>'9','name'=>'二級目錄B-2','pid'=>'2','sort'=>'2');
$data[10] = array('id'=>'10','name'=>'二級目錄B-3','pid'=>'2','sort'=>'3');
$data[11] = array('id'=>'11','name'=>'二級目錄C-1','pid'=>'3','sort'=>'2');
$data[12] = array('id'=>'12','name'=>'二級目錄D-1','pid'=>'4','sort'=>'1');
$data[13] = array('id'=>'13','name'=>'二級目錄D-2','pid'=>'4','sort'=>'2');
$data[14] = array('id'=>'14','name'=>'三級目錄A-2-1','pid'=>'6','sort'=>'1');
$data[15] = array('id'=>'15','name'=>'三級目錄A-2-2','pid'=>'6','sort'=>'2');
$data[16] = array('id'=>'16','name'=>'三級目錄C-1-1','pid'=>'11','sort'=>'1');
$data[17] = array('id'=>'17','name'=>'三級目錄B-2-1','pid'=>'9','sort'=>'2');

先寫一個(gè)顯示樹結(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);
        }
    }
}

遞歸-無限極分類

使用遞歸的方式獲取無限極分類數(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']);
        }
    }
}

使用引用-無限極分類

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']];
        }
    }
}

果然是厲害,代碼簡潔精煉,無需遞歸,執(zhí)行速度快。這是我偶然在一個(gè)網(wǎng)站上看到的,覺得很實(shí)用就收藏下來,分享給大家。
網(wǎng)站地址為:http://www.phpddt.com/php/generateTree.html

調(diào)用

//遞歸-無限極分類調(diào)用
getNodeTree($data,$tree);
printTree($tree);

//使用引用-無限極分類調(diào)用
createNodeTree($data,$tree);
printTree($tree);

結(jié)果

php 無限極分類
php 無限極分類
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容