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 extract 将数组拆分成多个变量的函数
Jun 30 PHP
基于php iconv函数的使用详解
Jun 09 PHP
php ctype函数中文翻译和示例
Mar 21 PHP
如何在HTML 中嵌入 PHP 代码
May 13 PHP
PHP在线调试执行的实现方法(附demo源码)
Apr 28 PHP
Yii2针对指定url的生成及图片等的引入方法小结
Jul 18 PHP
PHP购物车类Cart.class.php定义与用法示例
Jul 20 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
Oct 29 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
Dec 29 PHP
详解json在php中的应用
Sep 30 PHP
PHP底层运行机制与工作原理详解
Jul 31 PHP
如何用PHP实现分布算法之一致性哈希算法
May 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 IDE phpstorm 常用快捷键
2015/05/18 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
jquery 弹出层实现代码
2009/10/30 Javascript
jQuery 渐变下拉菜单
2009/12/15 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
详解Python的循环结构知识点
2019/05/20 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
python suds访问webservice服务实现
2020/06/26 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
100%羊绒:NakedCashmere
2020/08/26 全球购物
J2EE包括哪些技术
2016/11/25 面试题
网上蛋糕店创业计划书
2014/01/24 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书
远程教育学习心得体会
2016/01/23 职场文书
Python使用openpyxl批量处理数据
2021/06/23 Python
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript