Home > Backend Development > PHP Tutorial > PHP无限极分门别类巧用引用生成树

PHP无限极分门别类巧用引用生成树

WBOY
Release: 2016-06-13 11:55:35
Original
923 people have browsed it

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));
Copy after login

输出结果

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] => 浙江省        ))
Copy after login

果然是厉害,代码简洁精炼,无需递归,执行速度快。这是我偶然在一个网站上看到的,觉得很实用就收藏下来,分享给大家。

------------------------------------ 下面方框里是上一个博主提出的问题,我没看懂什么意思 ,惭愧!-------------------------------------

上面生成树方法还可以精简到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();}
Copy after login
上面这种无限极分类数据树形结构化的方法值得借鉴。但是我觉得这段代码实际用途并不明显啊,你想取出格式化的树形数据还是要递归啊:
/** * 如何取数据格式化的树形数据 */$tree = generateTree($items);function getTreeData($tree){    foreach($tree as $t){        echo $t['name'].'<br>';        if(isset($t['son'])){            getTreeData($t['son']);        }    }}getTreeData($tree);
Copy after login
不明白为什么他还要递归取出,如果把generateTree()的返回值 输出为json给前端不好吗?
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template