PHP树-不需要递归的实现方法


Posted in PHP onJune 21, 2016

PHP树-不需要递归的实现方法

/**
 * 创建父节点树形数组
 * 参数
 * $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');
  Print_r ($c);

执行效果:

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 相关文章推荐
is_uploaded_file函数引发的不能上传文件问题
Oct 29 PHP
实现获取http内容的php函数分享
Feb 16 PHP
php堆排序实现原理与应用方法
Jan 03 PHP
php循环table实现一行两列显示的方法
Jun 04 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 PHP
PHP的mysqli_thread_id()函数讲解
Jan 24 PHP
Laravel框架控制器的request与response用法示例
Sep 30 PHP
PHP字符串与数组处理函数用法小结
Jan 07 PHP
php+js实现点赞功能的示例详解
Aug 07 PHP
php中Swoole的热更新实现代码实例
Mar 04 PHP
PHP MySql增删改查的简单实例
Jun 21 #PHP
浅谈PHP eval()函数定义和用法
Jun 21 #PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
Jun 21 #PHP
Docker 如何布置PHP开发环境
Jun 21 #PHP
Yii2使用自带的UploadedFile实现的文件上传
Jun 20 #PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 #PHP
PHP开发制作一个简单的活动日程表Calendar
Jun 20 #PHP
You might like
一个php导出oracle库的php代码
2009/04/20 PHP
检测png图片是否完整的php代码
2010/09/06 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
用JS实现的一个include函数
2007/07/21 Javascript
javascript 写类方式之五
2009/07/05 Javascript
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
element-ui 设置菜单栏展开的方法
2018/08/22 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python实现感知器算法(批处理)
2019/01/18 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
java关于string最常出现的面试题整理
2021/01/18 Python
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
保护野生动物倡议书
2014/05/16 职场文书
大学生党员承诺书
2014/05/20 职场文书
食品安全标语
2014/06/07 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
任长霞观后感
2015/06/16 职场文书
对象析构函数__del__在Python中何时使用
2022/03/22 Python
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
解决 Redis 秒杀超卖场景的高并发
2022/04/12 Redis