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 和 MySQL 基础教程(二)
Oct 09 PHP
社区(php&&mysql)二
Oct 09 PHP
简单的php写入数据库类代码分享
Jul 26 PHP
php实现rc4加密算法代码
Apr 25 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
php中substr()函数参数说明及用法实例
Nov 15 PHP
浅谈PHP中JSON数据操作
Jul 01 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
PHP获取二维数组中某一列的值集合
Dec 25 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
Apr 03 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
Sep 26 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程序61条面向对象分析设计的经验小结
2008/11/12 PHP
PHP内核探索:变量概述
2014/01/30 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
基于jquery编写的横向自适应幻灯片切换特效的实例代码
2013/08/06 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
鼠标悬停小图标显示大图标
2016/01/22 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
对javascript继承的理解
2016/10/11 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
详解Python中的文本处理
2015/04/11 Python
python获取代理IP的实例分享
2018/05/07 Python
python实现扫描ip地址的小程序
2019/04/16 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
高级运动鞋:GREATS
2019/07/19 全球购物
车间统计员岗位职责
2014/01/05 职场文书
上班早退检讨书
2014/01/09 职场文书
电子信息科学专业自荐信
2014/01/30 职场文书
食品安全承诺书
2014/05/22 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
争先创优心得体会
2014/09/12 职场文书
师德师风个人整改措施
2014/10/27 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
Java8中接口的新特性使用指南
2021/11/01 Java/Android