PHP不用递归实现无限分级的例子分享


Posted in PHP onApril 18, 2014

两个不用递归的树形数组操作函数

/**
 * 创建父节点树形数组
 * 参数
 * $ar 数组,邻接列表方式组织的数据
 * $id 数组中作为主键的下标或关联键名
 * $pid 数组中作为父键的下标或关联键名
 * 返回 多维数组
 **/
function find_parent($ar, $id='id', $pid='pid') { 
  foreach($ar as $v) $t[$v[$id]] = $v;
  foreach ($t as $k => $item){
    if( $item[$pid] ){
      if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) )
         $t[$item[$id]]['parent'][$item[$pid]] =& $t[$item[$pid]];
    }
  } 
  return $t;
}

/**
 * 创建子节点树形数组
 * 参数
 * $ar 数组,邻接列表方式组织的数据
 * $id 数组中作为主键的下标或关联键名
 * $pid 数组中作为父键的下标或关联键名
 * 返回 多维数组
 **/
function find_child($ar, $id='id', $pid='pid') {
  foreach($ar as $v) $t[$v[$id]] = $v;
  foreach ($t as $k => $item){
    if( $item[$pid] ) {
      $t[$item[$pid]]['child'][$item[$id]] =& $t[$k];
    }
  }
  return $t;
}

使用例子:

$data = array(
  array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),
  array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),
  array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),
  array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),
  array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子'),
);
$p = find_parent($data, 'ID', 'PARENT');
$c = find_child($data, 'ID', 'PARENT');

执行效果:

Array
(
    [1] => Array
        (
            [ID] => 1
            [PARENT] => 0
            [NAME] => 祖父
            [child] => Array
                (
                    [2] => Array
                        (
                            [ID] => 2
                            [PARENT] => 1
                            [NAME] => 父亲
                            [child] => Array
                                (
                                    [4] => Array
                                        (
                                            [ID] => 4
                                            [PARENT] => 2
                                            [NAME] => 自己
                                            [child] => Array
                                                (
                                                    [5] => Array
                                                        (
                                                            [ID] => 5
                                                            [PARENT] => 4
                                                            [NAME] => 儿子
                                                        )                                                )
                                        )
                                )
                        )
                    [3] => Array
                        (
                            [ID] => 3
                            [PARENT] => 1
                            [NAME] => 叔伯
                        )
                )
        )
    [2] => Array
        (
            [ID] => 2
            [PARENT] => 1
            [NAME] => 父亲
            [child] => Array
                (
                    [4] => Array
                        (
                            [ID] => 4
                            [PARENT] => 2
                            [NAME] => 自己
                            [child] => Array
                                (
                                    [5] => Array
                                        (
                                            [ID] => 5
                                            [PARENT] => 4
                                            [NAME] => 儿子
                                        )
                                )
                        )
                )
        )
    [3] => Array
        (
            [ID] => 3
            [PARENT] => 1
            [NAME] => 叔伯
        )
    [4] => Array
        (
            [ID] => 4
            [PARENT] => 2
            [NAME] => 自己
            [child] => Array
                (
                    [5] => Array
                        (
                            [ID] => 5
                            [PARENT] => 4
                            [NAME] => 儿子
                        )
                )
        )
    [5] => Array
        (
            [ID] => 5
            [PARENT] => 4
            [NAME] => 儿子
        )
)
PHP 相关文章推荐
PHP环境搭建最新方法
Sep 05 PHP
5.PHP的其他功能
Oct 09 PHP
PHP完整的日历类(CLASS)
Nov 27 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
php 获取本地IP代码
Jun 23 PHP
zend optimizer在wamp的基础上安装图文教程
Oct 26 PHP
PHP利用str_replace防注入的方法
Nov 10 PHP
php自定文件保存session的方法
Dec 10 PHP
php生成RSS订阅的方法
Feb 13 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
php简单检测404页面的方法示例
Aug 23 PHP
PHP如何通过带尾指针的链表实现'队列'
Oct 22 PHP
利用php下载xls文件(自己动手写的)
Apr 18 #PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 #PHP
从PHP的源码中深入了解stdClass类
Apr 18 #PHP
理解PHP中的stdClass类
Apr 18 #PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 #PHP
php实现的漂亮分页方法
Apr 17 #PHP
codeigniter中测试通过的分页类示例
Apr 17 #PHP
You might like
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
php数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
js利用与或运算符优先级实现if else条件判断表达式
2010/04/15 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
解决js函数闭包内存泄露问题的办法
2016/01/25 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
security.js实现的RSA加密功能示例
2018/06/06 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
详解Python中find()方法的使用
2015/05/18 Python
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
基于Python安装pyecharts所遇的问题及解决方法
2019/08/12 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
Python while循环使用else语句代码实例
2020/02/07 Python
python使用re模块爬取豆瓣Top250电影
2020/10/20 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
考试不及格的检讨书
2014/01/22 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
店铺转让协议书
2015/01/29 职场文书
人事局接收函
2015/01/30 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
初一年级组工作总结
2015/08/12 职场文书
一文带你探究MySQL中的NULL
2021/11/11 MySQL