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 相关文章推荐
多重?l件?合查?(二)
Oct 09 PHP
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
php学习 字符串课件
Jun 15 PHP
PHP类中Static方法效率测试代码
Oct 17 PHP
php GeoIP的使用教程
Mar 09 PHP
使用配置类定义Codeigniter全局变量
Jun 12 PHP
smarty模板引擎中变量及变量修饰器用法实例
Jan 22 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
Nov 20 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 PHP
tp5.1 框架查询表达式用法详解
May 25 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开发文件系统实例讲解
2006/10/09 PHP
图书管理程序(二)
2006/10/09 PHP
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
JSONP之我见
2015/03/24 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
2016/02/14 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
vue.js的提示组件
2017/03/02 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
微信小程序中显示倒计时代码实例
2019/05/09 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
node.js 如何监视文件变化
2020/09/01 Javascript
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
python正则表达式之作业计算器
2016/03/18 Python
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
解读python如何实现决策树算法
2018/10/11 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
家具促销活动方案
2014/02/16 职场文书
团日活动总结
2014/04/28 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
教师个人教学总结
2015/02/11 职场文书
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python