###
這兩天腦殼痛,一時短路,想不到准備利用遞歸實現這個需求,最后還是要請教同事,回來自己在實現了一遍,並記錄下來
###
原數據:
// {
// 廣東省: {
// 廣州市: [
// "天河區",
// "從化區",
// "增城區"
// ],
// 深圳市: [
// "南山區",
// "福田區",
// "寶安區"
// ]
// },
// 吉林省: {
// 長春市: [
// "朝陽區"
// ]
// }
// }
需實現的樹結構格式:
[{
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;
效果


