zoukankan      html  css  js  c++  java
  • 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;

    效果

  • 相关阅读:
    献给即将27岁的我
    oracle导表小结
    [译]第三章:什么是组织结构
    第三章:什么是组织结构
    第二章:什么是组织
    [译]第二章:什么是组织
    第一章:什么是管理
    [译]第一章:什么是管理
    [原]DbHelper-SQL数据库访问助手
    DbHelper-SQL数据库访问助手
  • 原文地址:https://www.cnblogs.com/smallyi/p/9942366.html
Copyright © 2011-2022 走看看