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 相关文章推荐
PHP新手上路(十四)
Oct 09 PHP
10 个经典PHP函数
Oct 17 PHP
php中socket的用法详解
Oct 24 PHP
php获取数组元素中头一个数组元素值的实现方法
Dec 20 PHP
php为字符串前后添加指定数量字符的方法
May 04 PHP
WordPress主题制作之模板文件的引入方法
Dec 28 PHP
网页的分页下标生成代码(PHP后端方法)
Feb 03 PHP
PHP常见错误提示含义解释(实用!值得收藏)
Apr 25 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
Apr 28 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
Jul 12 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 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
第十三节 对象串行化 [13]
2006/10/09 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
一文搞懂ES6中的Map和Set
2019/05/20 Javascript
微信小程序new Date()方法失效问题解决方法
2019/07/29 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
python sort、sorted高级排序技巧
2014/11/21 Python
Python中的lstrip()方法使用简介
2015/05/19 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
python版本五子棋的实现代码
2018/12/11 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
擅自离岗检讨书
2014/09/12 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL