PHP超牛逼无限极分类生成树方法

 更新时间:2015年05月11日 10:13:01   投稿:junjie  
这篇文章主要介绍了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);

相关文章

  • PHP截断标题且兼容utf8和gb2312编码

    PHP截断标题且兼容utf8和gb2312编码

    PHP截断标题的方法有很多,但同时可以兼容utf8和gb2312却不多了,下面有个不错的方法,可以参考下,或许对大家有所帮助
    2013-09-09
  • php redis的scan用法实例分析

    php redis的scan用法实例分析

    在本篇文章了小编给大家整理了一篇关于php redis的scan用法实例分析内容,有兴趣的朋友们可以跟着学习下。
    2021-12-12
  • php工具型代码之印章抠图

    php工具型代码之印章抠图

    这篇文章主要为大家详细介绍了php工具型代码之印章抠图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • PHP的serialize序列化数据以及JSON格式化数据分析

    PHP的serialize序列化数据以及JSON格式化数据分析

    这篇文章的内容是PHP的serialize序列化数据以及JSON格式化数据分析,需要的朋友可以参考下
    2015-10-10
  • php 抽象类的简单应用

    php 抽象类的简单应用

    我想博客中的 文章列表和单个的文章阅读 统一起来,我觉得除了sql查询语句结构不同,HTML代码不同,其它也就一样。不过话说回来,这两个都是主要功能,所以这的确有点不适合,不过昨晚读了一点设计模式,好歹得写点啥好。
    2011-09-09
  • php smtp实现发送邮件功能

    php smtp实现发送邮件功能

    这篇文章主要为大家详细介绍了php smtp实现发送邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • php读取javascript设置的cookies的代码

    php读取javascript设置的cookies的代码

    最主要的就是给cookies设置一个名字,在javascript设置cookies的时候不要用无参数函数,那样用的话php没办法读取
    2010-04-04
  • php常用字符串输出方法分析(echo,print,printf及sprintf)

    php常用字符串输出方法分析(echo,print,printf及sprintf)

    这篇文章主要介绍了php常用字符串输出方法,结合实例形式分析了echo、print、printf及sprintf输出字符串的具体用法与相关使用技巧,需要的朋友可以参考下
    2016-07-07
  • PHP检测接口Traversable用法详解

    PHP检测接口Traversable用法详解

    这篇文章主要介绍了PHP检测接口Traversable用法,结合实例形式分析了Traversable接口检测遍历功能的相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • PHP实现将标点符号正则替换为空格的方法

    PHP实现将标点符号正则替换为空格的方法

    这篇文章主要介绍了PHP实现将标点符号正则替换为空格的方法,结合实例形式分析了php针对符号的正则匹配相关操作技巧,需要的朋友可以参考下
    2017-08-08

最新评论