php 引用實現無限極分類

原文鏈接:https://www.oschina.net/code/snippet_173183_11767
<?php
 
/**
 * 此方法由@Tonton 提供
 * http://my.oschina.net/u/918697
 * @date 2012-12-12 
 */
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(); 
} 
 
/**
 * 將數據格式化成樹形結構
 * @author Xuefen.Tong
 * @param array $items
 * @return array 
 */
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;
}
 
$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' => '上壩村'),
);
echo "<pre>";
print_r(genTree5($items));
print_r(genTree9($items));
 
//後者輸出格式,前者類似,只是數組鍵值不一樣,不過不影響數據結構
/*
Array
(
[0] => Array
    (
        [id] => 1
        [pid] => 0
        [name] => 江西省
        [son] => Array
            (
                [0] => Array
                    (
                        [id] => 3
                        [pid] => 1
                        [name] => 南昌市
                    )
 
                [1] => Array
                    (
                        [id] => 13
                        [pid] => 1
                        [name] => 贛州市
                        [son] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 14
                                        [pid] => 13
                                        [name] => 贛縣
                                        [son] => Array
                                            (
                                            [0] => Array
                                                (
                                                    [id] => 16
                                                    [pid] => 14
                                                    [name] => 茅店鎮
                                                    [son] => Array
                                                        (
                                                        [0] => Array
                                                            (
                                                            [id] => 18
                                                            [pid] => 16
                                                            [name] => 義源村
                                                            )
 
                                                        [1] => Array
                                                            (
                                                            [id] => 19
                                                            [pid] => 16
                                                            [name] => 上壩村
                                                            )
 
                                                        )
 
                                                )
 
                                            [1] => Array
                                                (
                                                    [id] => 17
                                                    [pid] => 14
                                                    [name] => 大田鄉
                                                )
 
                                            )
 
                                    )
 
                                [1] => Array
                                    (
                                        [id] => 15
                                        [pid] => 13
                                        [name] => 於都縣
                                    )
 
                            )
 
                    )
 
            )
 
    )
 
[1] => Array
    (
        [id] => 2
        [pid] => 0
        [name] => 黑龍江省
        [son] => Array
            (
                [0] => Array
                    (
                        [id] => 4
                        [pid] => 2
                        [name] => 哈爾濱市
                        [son] => Array
                            (
                            [0] => Array
                                (
                                    [id] => 6
                                    [pid] => 4
                                    [name] => 香坊區
                                    [son] => Array
                                        (
                                        [0] => Array
                                            (
                                                [id] => 8
                                                [pid] => 6
                                                [name] => 和興路
                                                [son] => Array
                                                    (
                                                        [0] => Array
                                                            (
                                                            [id] => 10
                                                            [pid] => 8
                                                            [name] => 
                                                             東北林業大學
                                                            )
 
                                                        [1] => Array
                                                            (
                                                            [id] => 12
                                                            [pid] => 8
                                                            [name] => 
                                                            哈爾濱師範大學
                                                            )
 
                                                    )
 
                                            )
 
                                        )
 
                                )
 
                            [1] => Array
                                (
                                    [id] => 7
                                    [pid] => 4
                                    [name] => 南崗區
                                    [son] => Array
                                        (
                                        [0] => Array
                                            (
                                            [id] => 9
                                            [pid] => 7
                                            [name] => 西大直街
                                            [son] => Array
                                                (
                                                [0] => Array
                                                    (
                                                    [id] => 11
                                                    [pid] => 9
                                                    [name] => 
                                                     哈爾濱工業大學
                                                    )
 
                                                )
 
                                            )
 
                                        )
 
                                )
 
                            )
 
                    )
 
                [1] => Array
                    (
                        [id] => 5
                        [pid] => 2
                        [name] => 雞西市
                    )
 
            )
 
    )
)*/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章