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入门速成(2)
Oct 09 PHP
php 字符串替换的方法
Jan 10 PHP
PHP 查找字符串常用函数介绍
Jun 07 PHP
PHP内核探索:变量概述
Jan 30 PHP
php图片处理函数获取类型及扩展名实例
Nov 19 PHP
php超快高效率统计大文件行数
Jul 05 PHP
php将金额数字转化为中文大写
Jul 09 PHP
PHP页面间传递值和保持值的方法
Aug 24 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
Sep 30 PHP
实现PHP搜索加分页
Oct 12 PHP
php生成图片缩略图功能示例
Feb 22 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
Mar 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
discuz安全提问算法
2007/06/06 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
2015/12/24 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
mouse_on_title.js
2006/08/25 Javascript
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
jquery提示 "object expected"的解决方法
2009/12/13 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
js charAt的使用示例
2014/02/18 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
2020/06/23 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
python实现逻辑回归的方法示例
2017/05/02 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
postman传递当前时间戳实例详解
2019/09/14 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
深入了解Python enumerate和zip
2020/07/16 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
Python SQLAlchemy库的使用方法
2020/10/13 Python
python excel多行合并的方法
2020/12/09 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
举例详解CSS3中的Transition
2015/07/15 HTML / CSS
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
Structs界面控制层技术
2013/10/11 面试题
12岁生日演讲稿
2014/05/14 职场文书
幼师辞职信范文
2015/02/27 职场文书
复试通知单模板
2015/04/24 职场文书