PHP树-不需要递归的实现方法

5年以前  |  阅读数:218 次  |  编程语言:PHP 

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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例