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;

效果

php递归实现一维数组转为指定树状结构 --- 省市区处理

php递归实现一维数组转为指定树状结构 --- 省市区处理

上一篇:objc[20556]:Class JavaLaunchHelper is implemented in both xxx 警告处理


下一篇:孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库