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
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
php实现按照权重随机排序数据的方法
Jan 09 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
php实现比较两个文件夹异同的方法
Jun 18 PHP
yii2缓存Caching基本用法示例
Jul 18 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
PHP实现对数字分隔加千分号的方法
Mar 18 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 PHP
PHP number_format函数原理及实例解析
Jul 14 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 define函数的使用说明
2008/08/27 PHP
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
php 函数中使用static的说明
2012/06/01 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
2011/03/01 Javascript
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
Sea.JS知识总结
2016/05/05 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
2017/06/25 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
学生会副主席竞聘书
2014/03/31 职场文书
捐书活动倡议书
2015/04/27 职场文书
Java中API的使用方法详情
2022/04/06 Java/Android
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers
浅谈Node的内存泄露问题
2022/05/06 NodeJs