php遞迴實現一維陣列轉為指定樹狀結構 --- 省市區處理
阿新 • • 發佈:2018-11-11
###
這兩天腦殼痛,一時短路,想不到準備利用遞迴實現這個需求,最後還是要請教同事,回來自己在實現了一遍,並記錄下來
###
原資料:
// { // 廣東省: { // 廣州市: [ // "天河區", // "從化區", // "增城區" // ], // 深圳市: [ // "南山區", // "福田區", // "寶安區" // ] // }, // 吉林省: { // 長春市: [ // "朝陽區" // ] // } // }
需實現的樹結構格式:
[{ 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;
效果