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 相关文章推荐
从网上搜到的phpwind 0day的代码
Dec 07 PHP
dedecms 制作模板中使用的全局标记图文教程
Mar 11 PHP
apache rewrite_module模块使用教程
Jan 10 PHP
php中session使用示例
Mar 29 PHP
php代码审计比较有意思的例子
May 07 PHP
php+xml实现在线英文词典之添加词条的方法
Jan 23 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
php mysql_list_dbs()函数用法示例
Mar 29 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
关于ThinkPHP中的异常处理详解
May 11 PHP
php中关于换行的实例写法
Sep 26 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 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调用Java对象的方法
2006/10/09 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
PHP闭包实例解析
2014/09/08 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
JS中setTimeout的巧妙用法前端函数节流
2016/03/24 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
Node.js事件的正确使用方法
2019/04/05 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
在CMD命令行中运行python脚本的方法
2018/05/12 Python
python django model联合主键的例子
2019/08/06 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
幼儿教师思想汇报
2014/01/10 职场文书
企业总经理职责
2014/02/02 职场文书
护士毕业实习感言
2014/03/05 职场文书
团结演讲稿范文
2014/05/23 职场文书
法定代表人身份证明书
2014/09/10 职场文书
导游欢送词
2015/01/31 职场文书
女方离婚起诉书
2015/05/18 职场文书
优化Mysql查询的示例
2022/04/26 MySQL