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;

 

效果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM