PHP---無限極分類數組處理


 $array = array(
    0=>array('id'=>1,'uid'=>0,'menuname'=>'菜單1','url'=>0,'addtime'=>'2018-08-29 16:36:55'),
    1=>array('id'=>2,'uid'=>0,'menuname'=>'菜單2','url'=>0,'addtime'=>'2018-08-29 16:36:55'),
    2=>array('id'=>3,'uid'=>1,'menuname'=>'1子菜單1','url'=>0,'addtime'=>'2018-08-29 16:36:55'),
    3=>array('id'=>4,'uid'=>3,'menuname'=>'1子菜單2','url'=>0,'addtime'=>'2018-08-29 16:36:55'),
    4=>array('id'=>5,'uid'=>2,'menuname'=>'2子菜單1','url'=>0,'addtime'=>'2018-08-29 16:36:55'),
);

 

(1) .遞歸實現

 function getTree($array, $pid =0, $level = 0){
    //聲明靜態數組,避免遞歸調用時,多次聲明導致數組覆蓋
    static $list = [];
    foreach ($array as $key => $value){
        //第一次遍歷,找到父節點為根節點的節點 也就是pid=0的節點
        if ($value['pid'] == $pid){
            //父節點為根節點的節點,級別為0,也就是第一級
            $value['level'] = $level;
            //把數組放到list中
            $list[] = $value;
            //把這個節點從數組中移除,減少后續遞歸消耗
            unset($array[$key]);
            //開始遞歸,查找父ID為該節點ID的節點,級別則為原級別+1
           getTree($array, $value['id'], $level+1);
        }
    }
    return $list;
}

結果如圖:

 

 

 

(2) .樹結構

function getTree($items,$pid ="pid") {
    $map  = [];
    $tree = [];
    foreach ($items as &$it){ $map[$it['id']] = &$it; }  //數據的ID名生成新的引用索引樹
    foreach ($items as &$at){
        $parent = &$map[$at[$pid]];
        if($parent) {
            $parent['children'][] = &$at;
        }else{
            $tree[] = &$at;
        }
    }
    return $tree;
}

 

結果如圖:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM