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;
效果