国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP超牛逼無限極分類生成樹方法

2024-05-04 23:34:59
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP超牛逼無限極分類生成樹方法,本文巧用PHP中的引用實現樹的生成方法,比遞歸方法高端多了,需要的朋友可以參考下
 

你還在用浪費時間又浪費內存的遞歸遍歷無限極分類嗎,看了該篇文章,我覺得你應該換換了。

這是我在OSChina上看到的一段非常精簡的PHP無限極分類生成樹方法,巧在引用,整理分享了。

 

復制代碼代碼如下:

function generateTree($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' => 3, 'name' => '長豐縣'),
    5 => array('id' => 5, 'pid' => 1, 'name' => '安慶市'),
);
print_r(generateTree($items));

 

可以看到下面打印的結果:

 

復制代碼代碼如下:

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] => 長豐縣
                                        )
 
                                )
 
                        )
 
                    [1] => Array
                        (
                            [id] => 5
                            [pid] => 1
                            [name] => 安慶市
                        )
 
                )
 
        )
 
    [1] => Array
        (
            [id] => 2
            [pid] => 0
            [name] => 浙江省
        )
 
)

上面生成樹方法還可以精簡到5行:
復制代碼代碼如下:

function generateTree($items){
    foreach($items as $item)
        $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
    return isset($items[0]['son']) ? $items[0]['son'] : array();
}

 

上面這種無限極分類數據樹形結構化的方法值得借鑒。但是我覺得這段代碼實際用途并不明顯啊,你想取出格式化的樹形數據還是要遞歸啊:

 

復制代碼代碼如下:

/**
 * 如何取數據格式化的樹形數據
 */
$tree = generateTree($items);
function getTreeData($tree){
    foreach($tree as $t){
        echo $t['name'].'<br>';
        if(isset($t['son'])){
            getTreeData($t['son']);
        }
    }
}
getTreeData($tree);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安岳县| 南乐县| 河源市| 汤原县| 新巴尔虎右旗| 自治县| 忻城县| 房产| 石门县| 遂昌县| 桐城市| 新津县| 丁青县| 曲水县| 合山市| 绥中县| 白沙| 陆川县| 霍山县| 涿鹿县| 中超| 大田县| 怀来县| 翁源县| 灵丘县| 涟源市| 双牌县| 南乐县| 南漳县| 萨迦县| 永济市| 留坝县| 东阿县| 榆树市| 大方县| 惠安县| 遂昌县| 巴彦县| 泗水县| 塔河县| 莒南县|