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 相关文章推荐
超级简单的发送邮件程序
Oct 09 PHP
用PHP进行MySQL删除记录操作代码
Jun 07 PHP
PHP 得到根目录的 __FILE__ 常量
Jul 23 PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
Sep 10 PHP
php cli 小技巧
Jun 03 PHP
destoon各类调用汇总
Jun 20 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
php对接java现实加签验签的实例
Nov 25 PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 PHP
PHP Trait代码复用类与多继承实现方法详解
Jun 17 PHP
php源码的安装方法和实例
Sep 26 PHP
php传值和传引用的区别点总结
Nov 19 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
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
浅谈js的异步执行
2016/10/18 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
初步解析Python下的多进程编程
2015/04/28 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
python excel转换csv代码实例
2019/08/26 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
详细的大学生创业计划书模板
2014/01/27 职场文书
企业职业病防治方案
2014/05/29 职场文书
经济贸易系求职信
2014/08/04 职场文书
赢在执行观后感
2015/06/16 职场文书
2016新年感言
2015/08/03 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
ant design vue的form表单取值方法
2022/06/01 Vue.js