PHP實現菜單無限極分類


菜單數據

這里我們的菜單數據是臨時數據, 沒有從數據庫中查詢處理,數據基本和數據庫中的的相似. 數據如下:

$items = array(
            1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
            2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
            3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
            4 => array('id' => 4, 'pid' => 3, 'name' => '長豐縣'),
            6 => array('id' => 6, 'pid' => 4, 'name' => '小溪村'),
            5 => array('id' => 5, 'pid' => 1, 'name' => '安慶市'),
        );

這里的數據,也是更改為從數據庫查詢出來的真實數據.

創建一個菜單無限極分類方法

 function generateTree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0)
{
    $tree     = array();
    $packData = array();
    foreach ($list as $data) {
        $packData[$data[$pk]] = $data;
    }
    foreach ($packData as $key => $val) {
        if ($val[$pid] == $root) {
//代表跟節點, 重點一
            $tree[] = &$packData[$key];
        } else {
            //找到其父類,重點二
            $packData[$val[$pid]][$child][] = &$packData[$key];
        }
    }
    return $tree;
}

分析代碼上面的代碼:這里比較重要的地方,就是代碼中注釋的地方,重點1, 重點2. 
1.首先遍歷數組 
2.重點1的意思是,判斷是不是根菜單,如果是那么就把根菜單數組,把數組的引用賦給新數組 
4.重點2的意思是, 子類數組賦值給父類數組中鍵為$child的數組 
5.最后得到的便是一個樹狀結構的數組,

結果如下:

Array ( 
[0] => Array ( [id] => 1 [pid] => 0 [name] => 安徽省 [son] => Array ( [0] => Array ( [id] => 3 [pid] => 1 [name] => 合肥市 [son] => Array ( [0] => Array ( [id] => 4 [pid] => 3 [name] => 長豐縣 [son] => Array ( [0] => Array ( [id] => 6 [pid] => 4 [name] => 小溪村 ) ) ) ) ) 
[1] => Array ( [id] => 5 [pid] => 1 [name] => 安慶市 ) ) )

 [1] => Array ( [id] => 2 [pid] => 0 [name] => 浙江省 ) )

原文鏈接:https://blog.csdn.net/qq_35662795/article/details/65448569


免責聲明!

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



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