首頁 後端開發 php教程 PHP從二維數組得到N層分類樹的實作程式碼

PHP從二維數組得到N層分類樹的實作程式碼

Dec 20, 2016 pm 03:30 PM
php數組

公司的產品分類存在一張表內,以mid標識其父分類,需要得到有層次結構的數組,以便後續操作。

想了一下,想了一會兒沒想出不去重複讀取資料庫的方法或不需要遞歸的操作。

資料來源:(資料要求一維key與對應value二維數組的id要一樣)

$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' => 2, 'name' => '哈尔滨市'),
    5 => array('id' => 5, 'pid' => 2, 'name' => '鸡西市'),
    6 => array('id' => 6, 'pid' => 4, 'name' => '香坊区'),
    7 => array('id' => 7, 'pid' => 4, 'name' => '南岗区'),
    8 => array('id' => 8, 'pid' => 6, 'name' => '和兴路'),
    9 => array('id' => 9, 'pid' => 7, 'name' => '西大直街'),
    10 => array('id' => 10, 'pid' => 8, 'name' => '东北林业大学'),
    11 => array('id' => 11, 'pid' => 9, 'name' => '哈尔滨工业大学'),
    12 => array('id' => 12, 'pid' => 8, 'name' => '哈尔滨师范大学'),
    13 => array('id' => 13, 'pid' => 1, 'name' => '赣州市'),
    14 => array('id' => 14, 'pid' => 13, 'name' => '赣县'),
    15 => array('id' => 15, 'pid' => 13, 'name' => '于都县'),
    16 => array('id' => 16, 'pid' => 14, 'name' => '茅店镇'),
    17 => array('id' => 17, 'pid' => 14, 'name' => '大田乡'),
    18 => array('id' => 18, 'pid' => 16, 'name' => '义源村'),
    19 => array('id' => 19, 'pid' => 16, 'name' => '上坝村'),
);
登入後複製

生成樹的函數:

function genTree9($items) {
    $tree = array();
    foreach ($items as $item)
        if (isset($items[$item['pid']]))
            $items[$item['pid']]['son'][] = &$items[$item['id']];
        else
            $tree[] = &$items[$item['id']];
    return $tree;
}
登入後複製

當然。滿足特定條件下的數據,更是可以把函數縮到只有短短5行:

function genTree5($items) {
    foreach ($items as $item)
        $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
    return isset($items[0]['son']) ? $items[0]['son'] : array();
}
登入後複製

一遍循環,記憶體引用。省時又省空間。

更多PHP從二維數組得到N層分類樹的實現代碼相關文章請關注PHP中文網!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用PHP數組實現圖表和統計圖的產生和顯示 如何使用PHP數組實現圖表和統計圖的產生和顯示 Jul 15, 2023 pm 12:24 PM

如何使用PHP數組實現圖表和統計圖的產生和顯示

如何使用PHP陣列產生動態投影片和圖片展示 如何使用PHP陣列產生動態投影片和圖片展示 Jul 15, 2023 pm 01:17 PM

如何使用PHP陣列產生動態投影片和圖片展示

如何使用PHP陣列實現使用者登入和權限管理的功能 如何使用PHP陣列實現使用者登入和權限管理的功能 Jul 15, 2023 pm 08:55 PM

如何使用PHP陣列實現使用者登入和權限管理的功能

php怎麼判斷陣列有幾個 php怎麼判斷陣列有幾個 Aug 04, 2023 pm 05:40 PM

php怎麼判斷陣列有幾個

php數組鍵值對是什麼 php數組鍵值對是什麼 Aug 03, 2023 pm 02:20 PM

php數組鍵值對是什麼

PHP數組並集的有效實作方式 PHP數組並集的有效實作方式 Apr 30, 2024 pm 01:03 PM

PHP數組並集的有效實作方式

PHP數組的效能最佳化技巧探究 PHP數組的效能最佳化技巧探究 Mar 13, 2024 pm 03:03 PM

PHP數組的效能最佳化技巧探究

php判斷數組為空的函數是什麼 php判斷數組為空的函數是什麼 Aug 03, 2023 pm 05:15 PM

php判斷數組為空的函數是什麼

See all articles