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 相关文章推荐
PHP4之COOKIE支持详解
Oct 09 PHP
php自动适应范围的分页代码
Aug 05 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
gd库图片下载类实现下载网页所有图片的php代码
Aug 20 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 PHP
PHP限制HTML内容中图片必须是本站的方法
Jun 16 PHP
Yii数据库缓存实例分析
Mar 29 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
PHP生成zip压缩包的常用方法示例
Aug 22 PHP
Yii框架的路由配置方法分析
Sep 09 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
php计算程序运行时间的简单例子分享
2014/05/10 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
2018/12/24 PHP
javascript函数中的arguments参数
2010/08/01 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
javascript判断变量是否有值的方法
2015/04/20 Javascript
原生js配合cookie制作保存路径的拖拽
2015/12/29 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
Python用模块pytz来转换时区
2016/08/19 Python
python线程中同步锁详解
2018/04/27 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
入党自我鉴定
2014/03/25 职场文书
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
数据保密承诺书
2014/06/03 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
党小组鉴定意见
2015/06/02 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
Android自定义双向滑动控件
2022/04/19 Java/Android