1. 程式人生 > >php遞迴實現一維陣列轉為指定樹狀結構 --- 省市區處理

php遞迴實現一維陣列轉為指定樹狀結構 --- 省市區處理

###

這兩天腦殼痛,一時短路,想不到準備利用遞迴實現這個需求,最後還是要請教同事,回來自己在實現了一遍,並記錄下來

###

原資料:

// {
// 	廣東省: {
// 		廣州市: [
// 			"天河區",
// 			"從化區",
// 			"增城區"
// 		],
// 		深圳市: [
// 			"南山區",
// 			"福田區",
// 			"寶安區"
// 		]
// 	},
// 	吉林省: {
// 		長春市: [
// 			"朝陽區"
// 		]
// 	}
// }

 需實現的樹結構格式:

[{     value: "廣東省",     children: [{         value: "廣州市",         children: [{             value: "天河區"         },{             value: "從化區"         },{             value: "增城區"         }]     },{         value: "深圳市",         children: [{             value: "南山區"         },{             value: "福田區"         },{             value: "寶安區"         }]     }] },{     value: "吉林省",     children: [{         value: "長春市",         children: [{             value: "朝陽區"         }]     }] }]

  

實現過程:

1.實現一個獲取多維資料層數的函式

// 遞迴獲取陣列結構的層數
function
get_array_level($arr) { $level = 1; if (is_array($arr)) { foreach ($arr as $key => $value) { if (!empty($value)) { $level += 1; get_array_level($value); } } }
return $level; 、 }

 

2.進行樹結構的組裝


//轉為指定樹狀結構
function
get_array_tree($arr) { $res_arr = array();    // 獲取陣列的層次 $level = get_array_level($arr); if ($level > 1) { foreach ($arr as $key => $value) { if (is_array($value)) { $res_arr[] = array
( 'value' => $key, 'children' => get_array_tree($value) // 遞迴返回遍歷資料的子陣列 ); } else { $res_arr[] = array( 'value' => $value, ); } } } return $res_arr; }

 

 

列印陣列

  $arr = get_array_tree($arr);
  echo json_encode($arr);die;

 

效果