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 相关文章推荐
mysql中存储过程、函数的一些问题
Feb 14 PHP
PHP连接SQLServer2005 的问题解决方法
Jul 19 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
Apr 01 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
Mar 14 PHP
PHP设计模式之工厂模式详解
Oct 24 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
PHP使用文件锁解决高并发问题示例
Mar 29 PHP
php中isset与empty函数的困惑与用法分析
Jul 05 PHP
laravel 关联关系遍历数组的例子
Oct 10 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 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中socket通信机制实例详解
2015/01/03 PHP
php格式化电话号码的方法
2015/04/24 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
Python实现随机选择元素功能
2017/09/14 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
浅析python实现动态规划背包问题
2020/12/31 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
Linux上比较文件的命令都有哪些
2012/02/24 面试题
英文自荐信
2013/12/15 职场文书
学校课外活动总结
2014/05/08 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP
GO中sync包自由控制并发示例详解
2022/08/05 Golang