1. 程式人生 > >php用遞迴實現無限極分類獲取樹形結構

php用遞迴實現無限極分類獲取樹形結構

 表中的資料如下:

遞迴的方法: 

/**
 * 用遞迴獲取子類資訊
 * $data 所有分類
 * $parent_id 父級id
 * $level 層級
 * $result 分好類的陣列
*/
function getChild($data,$parent_id = 0,$level = 0){
    //宣告靜態陣列,避免遞迴呼叫時,多次宣告導致陣列覆蓋
    static  $result;
    foreach ($data as $key => $info){
        //第一次遍歷,找到父節點為根節點的節點 也就是parent_id=0的節點
        if($info['parent_id'] == $parent_id){
            $info['level'] = $level;
            $result[] = $info;
            //把這個節點從陣列中移除,減少後續遞迴消耗
            unset($data[$key]);
            //開始遞迴,查詢父ID為該節點ID的節點,級別則為原級別+1
            getChild($data,$info['id'],$level+1);
        }
    }
    return $result;
}

得到的結果:

array:4 [▼
  0 => {#220 ▼
    +"id": 1
    +"cate_name": "服裝"
    +"parent_id": "0"
    +"sort": 10
    +"create_time": "0000-00-00 00:00:00"
    +"update_time": "0000-00-00 00:00:00"
    +"level": 0
  }
  1 => {#223 ▼
    +"id": 3
    +"cate_name": "女裝"
    +"parent_id": "1"
    +"sort": 10
    +"create_time": "0000-00-00 00:00:00"
    +"update_time": "0000-00-00 00:00:00"
    +"level": 1
  }
  2 => {#224 ▼
    +"id": 4
    +"cate_name": "連衣裙"
    +"parent_id": "3"
    +"sort": 10
    +"create_time": "0000-00-00 00:00:00"
    +"update_time": "0000-00-00 00:00:00"
    +"level": 2
  }
  3 => {#222 ▼
    +"id": 2
    +"cate_name": "電子"
    +"parent_id": "0"
    +"sort": 10
    +"create_time": "0000-00-00 00:00:00"
    +"update_time": "0000-00-00 00:00:00"
    +"level": 0
  }
]

用這個結果直接迴圈就可以得到自己想要的資料了