###

这两天脑壳痛,一时短路,想不到准备利用递归实现这个需求,最后还是要请教同事,回来自己在实现了一遍,并记录下来

###

原数据:

// {
// 广东省: {
// 广州市: [
// "天河区",
// "从化区",
// "增城区"
// ],
// 深圳市: [
// "南山区",
// "福田区",
// "宝安区"
// ]
// },
// 吉林省: {
// 长春市: [
// "朝阳区"
// ]
// }
// }

 需实现的树结构格式:

[{
    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递归实现一维数组转为指定树状结构 --- 省市区处理的更多相关文章

  1. 树 List Leaves 【用数组模拟了树状结构建树+搜索叶子节点+按照特殊规律输出每个叶子节点】

    Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ...

  2. PHP利用递归法获取多级类别的树状数组

    数据结构:category(id, pid, name),对应:信息ID,父项ID,类别名 测试数据: $aryCate = array( array('id' => 1, 'pid' => ...

  3. js List<Map> 将偏平化的数组转为树状结构并排序

    数据格式: [ { "id":"d3e8a9d6-e4c6-4dd8-a94f-07733d3c1b59", "parentId":&quo ...

  4. 使用Map辅助拼装树状结构,消除递归调用

    目前菜单或其他树状结构在数据库中的存储,多数是以一个parentid作为关联字段,以一维形式存储.使用时全部查询出来,然后在内存中拼装成树状结构.现在主要涉及的是拼装方法的问题. 一般可以进行 递归调 ...

  5. oracle 树状结构递归 PL/SQL输出控制 包括空格输出控制

    树状结构 存储过程中通过递归构建,类似BBS回帖显示,代码共三段: 建表,插入数据,创建存储过程显示: 1.create table article(id number primary key,con ...

  6. js 每日一更(数组转换成前端更容易解析的树状结构)

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...

  7. 树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示

    树状结构Java模型.层级关系Java模型.上下级关系Java模型与html页面展示 一.业务原型:公司的组织结构.传销关系网 二.数据库模型 很简单,创建 id 与 pid 关系即可.(pid:pa ...

  8. lua 怎样输出树状结构的table?

    为了让游戏前端数据输出更加条理,做了一个简单树状结构来打印数据. ccmlog.lua local function __tostring(value, indent, vmap) local str ...

  9. 原生JS实现树状结构列表

    树状结构列表,这个技术点之前有写过了,是基于vue讲解,但似乎都没有解决痛点,最基础的原生JS该怎么实现呢? 这篇文章会全面详细的介绍树状结构列表的实现,从数据处理成树状结构,到动态生成dom节点渲染 ...

随机推荐

  1. JSON 的几种转换

    package com.qbskj.project.util; import java.io.IOException; import java.io.Writer; import org.spring ...

  2. CentOS7切换源

    1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base ...

  3. IntelliJ IDEA 2018 最新版注册码

    参考:IntelliJ IDEA 2018注册码(无需修改hosts文件) :

  4. BUGKU Misc 普通的二维码

    下载的文件是一个bmp文件,在我的印象中bmp好像没有什么隐写技巧,有些慌张. 既然是二维码,那不妨先扫一下试一试 哈哈!就不告诉你flag在这里! 嗯,意料之中 1首先我把它放到了stegosolv ...

  5. python经典例题100题01

    [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? ans = [i*100+j*10+k for i in range(1, 5) for j in ra ...

  6. ADC采样工作原理详解

    如何利用单片机的ADC模块(或者独立的ADC芯片)得到接入ADC管脚上的实际电压值?这个问题,是第一次接触ADC时候,大家都会遇到的问题.会读到什么值单片机会读到什么值?需要看一个特性,就是几位的AD ...

  7. ab命令

    ab -V -n在测试会话中所执行的请求个数.默认时,仅执行一个请求.请求的总数量 -c一次产生的请求个数.默认是一次一个.请求的用户量 -t测试所进行的最大秒数.其内部隐含值是-n 50000,它可 ...

  8. POJ 1848 Tree 树形DP

    题目大意: 给出一棵树,现在要往这棵树上加边,使得所有的点都在环中,且每个点只能属于一个环 题解: 考虑DP: \(dp[i][0]\)表示使\(i\)这颗子树的每个点都在环内需要加的最少边数. \( ...

  9. [CTSC2017]网络

    [CTSC2017]网络 连一条长度为len的边,使得基环树的直径最小 结论:一定连在某条直径两个点上(否则更靠近不劣) 然后二分答案判定. dp[i]:链上一个点往下延伸的最大深度 考虑对于任意两个 ...

  10. JWT 加密

    什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...