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


Posted in PHP onMay 11, 2015

你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。

这是我在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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
php下使用SimpleXML 处理XML 文件
Feb 27 PHP
PHP的可变变量名的使用方法分享
Feb 05 PHP
thinkphp的c方法使用示例
Feb 24 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
PHP获取指定月份第一天和最后一天的方法
Jul 18 PHP
php时间计算相关问题小结
May 09 PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
PHP 获取客户端 IP 地址的方法实例代码
Nov 11 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 #PHP
PHP获取当前日期和时间及格式化方法参数
May 11 #PHP
PHP借助phpmailer发送邮件
May 11 #PHP
PHP date函数常用时间处理方法
May 11 #PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 #PHP
php.ini中的request_order推荐设置
May 10 #PHP
浅析iis7.5安装配置php环境
May 10 #PHP
You might like
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
2014/06/06 PHP
php中file_exists函数使用详解
2015/05/08 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
Laravel实现ApiToken认证请求
2019/10/14 PHP
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
CSS和Javascript简单复习资料
2010/06/29 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
Python进行数据提取的方法总结
2016/08/22 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
外贸业务员岗位职责
2013/11/24 职场文书
护士检查书
2014/01/17 职场文书
大学班级计划书
2014/04/29 职场文书
复试通知单模板
2015/04/24 职场文书
百万英镑观后感
2015/06/09 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL
Python办公自动化PPT批量转换操作
2021/09/15 Python
关于EntityWrapper的in用法
2022/03/22 Java/Android
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript
html网页引入svg图片的4种方式
2022/08/05 HTML / CSS