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实现MySQL更新记录的代码
Jun 07 PHP
纯php打造的tab选项卡效果代码(不用js)
Dec 29 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
php tp验证表单与自动填充函数代码
Feb 22 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 PHP
php获取bing每日壁纸示例分享
Feb 25 PHP
图文介绍PHP添加Redis模块及连接
Jul 28 PHP
CI配置多数据库访问的方法
Mar 28 PHP
PHP+Ajax实现验证码的实时验证
Jul 20 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
PHP多进程编程之僵尸进程问题的理解
Oct 15 PHP
php用wangeditor3实现图片上传功能
Aug 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
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
浅谈PHP array_search 和 in_array 函数效率问题
2019/10/15 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
2020/05/02 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
Python正则表达式指南 推荐
2018/10/09 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
python实现简易数码时钟
2021/02/19 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
pycharm的python_stubs问题
2020/04/08 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
交通法规咨询中心工作职责
2013/11/27 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
婚纱摄影师求职信范文
2014/04/17 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
人事代理委托书
2014/09/27 职场文书
家庭困难证明
2014/10/12 职场文书
个人合伙协议书范本
2014/10/14 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
Python编程super应用场景及示例解析
2021/10/05 Python