php用遞迴實現無限極分類獲取樹形結構
阿新 • • 發佈:2018-12-11
表中的資料如下:
遞迴的方法:
/** * 用遞迴獲取子類資訊 * $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 } ]
用這個結果直接迴圈就可以得到自己想要的資料了