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来自动调用不同服务器上的flash
Oct 09 PHP
简单介绍下 PHP5 中引入的 MYSQLI的用途
Mar 19 PHP
php循环输出数据库内容的代码
May 24 PHP
将数组写入txt文件 var_export
Apr 21 PHP
PHP 输出缓存详解
Jun 20 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
php中inlcude()性能对比详解
Sep 16 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
Mar 17 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
Jun 19 PHP
PHP常用字符串函数用法实例总结
Jun 04 PHP
php解析非标准json、非规范json的方式实例
Dec 10 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
php设计模式 Singleton(单例模式)
2011/06/26 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
javascript实现拖放效果
2015/12/16 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
Python 文件重命名工具代码
2009/07/26 Python
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
浅析使用Python操作文件
2017/07/31 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
python多线程并发实例及其优化
2019/06/27 Python
python生成大写32位uuid代码
2020/03/03 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
世界上最大的二手相机店:KEN
2017/05/17 全球购物
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
团代会主持词
2014/04/02 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
环境卫生倡议书
2014/08/29 职场文书
玄武湖导游词
2015/02/05 职场文书
研究生个人学年总结
2015/02/14 职场文书
班主任开场白
2015/06/01 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
Python使用pandas导入xlsx格式的excel文件内容操作代码
2022/12/24 Python