PHP樹-不需要遞歸的實現(xiàn)方法

字號:


    下面小編就為大家?guī)硪黄狿HP樹-不需要遞歸的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。
    PHP樹-不需要遞歸的實現(xiàn)方法
    /**
     * 創(chuàng)建父節(jié)點樹形數組
     * 參數
     * $ar 數組,鄰接列表方式組織的數據
     * $id 數組中作為主鍵的下標或關聯(lián)鍵名
     * $pid 數組中作為父鍵的下標或關聯(lián)鍵名
     * 返回 多維數組
     **/
    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;
    }
    /**
     * 創(chuàng)建子節(jié)點樹形數組
     * 參數
     * $ar 數組,鄰接列表方式組織的數據
     * $id 數組中作為主鍵的下標或關聯(lián)鍵名
     * $pid 數組中作為父鍵的下標或關聯(lián)鍵名
     * 返回 多維數組
     **/
    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);
    執(zhí)行效果:
    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樹-不需要遞歸的實現(xiàn)方法就是小編分享給大家的全部內容了,希望能給大家一個參考