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下一个阿拉伯数字转中文数字的函数
Jul 16 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
Sep 30 PHP
php页面消耗内存过大的处理办法
Mar 18 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
php实现表单多按钮提交action的处理方法
Oct 24 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
php中static 静态变量和普通变量的区别
Dec 01 PHP
Yii全局函数用法示例
Jan 22 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
Jun 25 PHP
php 函数中静态变量使用的问题实例分析
Mar 05 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实现URL加密解密的方法
2016/11/17 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
一个js控制的导航菜单实例代码
2013/12/03 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
Vue实现购物车功能
2017/04/27 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
Python with的用法
2014/08/22 Python
python连接oracle数据库实例
2014/10/17 Python
详解Python中的循环语句的用法
2015/04/09 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
matplotlib实现区域颜色填充
2019/03/18 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
python如何代码集体右移
2020/07/20 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
Myprotein瑞士官方网站:运动营养和健身网上商店
2019/09/25 全球购物
四种会话跟踪技术
2015/05/20 面试题
成功的酒店创业计划书
2013/12/27 职场文书
农民入党思想汇报
2014/01/03 职场文书
专题组织生活会方案
2014/06/15 职场文书
医院标语大全
2014/06/23 职场文书
工作失职检讨书500字
2014/10/17 职场文书
入党宣誓大会后的感想
2015/08/10 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书
某某店铺的开业庆典主持词范本
2019/11/25 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
Django框架中表单的用法
2022/06/10 Python