<?php
/**
* @param array $list 要转换的结果集
* @param string $pid parent标记字段
* @param string $level level标记字段
*/
function list_to_tree($list, $pk='id', $pid = 'pid', $child = 'listArea', $root = 0) {
//创建Tree
$tree = array();

if (is_array($list)) {
//创建基于主键的数组引用
$refer = array();

foreach ($list as $key => $data) {
$refer[$data[$pk]] = &$list[$key];
}

foreach ($list as $key => $data) {
//判断是否存在parent
$parantId = $data[$pid];

if ($root == $parantId) {
$tree[] = &$list[$key];
} else {
if (isset($refer[$parantId])) {
$parent = &$refer[$parantId];
$parent[$child][] = &$list[$key];
}
}
}
}

return $tree;
}

$arr = array(
array('id'=>1,'pid'=>0,'name' => urlencode('大连'), 'code' => 'dd', 'listArea' => array()),
array('id'=>2,'pid'=>1,'name' => urlencode('香港'), 'code' => 'dd', 'listArea' => array()),
array('id'=>4,'pid'=>3,'name' => 'm', 'code' => 'dd', 'listArea' => array()),
array('id'=>2,'pid'=>1,'name' => 'gg', 'code' => 'aa', 'listArea' => array()),
array('id'=>3,'pid'=>1,'name' => 'e', 'code' => 'dd', 'listArea' => array())
);
//$array = array(array('id'=>0,'pid'=>0,'name' => '全国'));
//$array2 = array_merge($array, $arr);
//array_push($arr, $array);

//print_r($array);exit;

$tree = list_to_tree($arr);
echo json_encode($tree);

注意:不会显示没有子节点的对象

php 二维数组转换成树状数组(转)的更多相关文章

  1. 【BZOJ】1047: [HAOI2007]理想的正方形(单调队列/~二维rmq+树状数组套树状数组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1047 树状数组套树状数组真心没用QAQ....首先它不能修改..而不修改的可以用单调队列做掉,而且更 ...

  2. 【BZOJ3196】二逼平衡树(树状数组,线段树)

    [BZOJ3196]二逼平衡树(树状数组,线段树) 题面 BZOJ题面 题解 如果不存在区间修改操作: 搞一个权值线段树 区间第K大--->直接在线段树上二分 某个数第几大--->查询一下 ...

  3. BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树

    BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...

  4. 【BZOJ-1452】Count 树状数组 套 树状数组

    1452: [JSOI2009]Count Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1769  Solved: 1059[Submit][Stat ...

  5. 如何将PHP对象数组转换成普通数组

    /** * 对象数组转为普通数组 * * AJAX提交到后台的JSON字串经decode解码后为一个对象数组, * 为此必须转为普通数组后才能进行后续处理, * 此函数支持多维数组处理. * * @p ...

  6. C# 之 将string数组转换到int数组并获取最大最小值

    1.string 数组转换到 int 数组 " }; int[] output = Array.ConvertAll<string, int>(input, delegate(s ...

  7. 字符串集合或字符串数组转换成json数组

    字符串可以是List<String>类型的字符串集合,也可以是String[]类型的字符串数组,二者转换成JSON数组的方式没有什么不同.下面代码注意关键的部分即可(画红线部分). 1. ...

  8. Python中如何将二维列表转换成一维列表

    已知:a = [(4,2,3), (5, 9, 1), (7,8,9)]希望将二维列表转换成一维列表:["4,2,3", "5, 9, 1", "7, ...

  9. 将二维数组转换成一维数组(基于reduce)

    reduce:不改变原数组,返回一个新的数组.就是遍历数组元素,从头开始,依次往下,第一个参数是上一次的返回值,第二个参数是下一个数组元素,首次的时候第一个和第二个参数分别是 array[0],  a ...

随机推荐

  1. visual studio中验证控件的使用

    1.RequiredFieldValidator:验证一个必填字段,如果这个字段没填,那么,将不能提交信息. RequiredFieldValidator控件中,主要设置三个属性: (1)ErrorM ...

  2. input file文件上传样式

    <style>    .file-group {        position: relative;        width: 200px;        height: 80px;  ...

  3. Python Tutorial 学习(一)--Whetting Your Appetite

    Whetting Your Appetite [吊你的胃口]... 这里就直接原文奉上了... If you do much work on computers, eventually you fin ...

  4. centos下Elasticsearch数据迁移与备份

    ########### ### 共享创建es官方网站就一句话 ########   1.下载 文件共享 .. rpm -i http://mirror.symnds.com/distributions ...

  5. 分布式系统间通信之RPC简单Demo(七)

    看似终点,回到起点.第一次接触C#,编写的第一个真正的Demo是基于Socket的简单通信,现在JAVA开始的第一个RPC的Demo也是基于Socket.. 下面通过java原生的序列化,Socket ...

  6. 利用Xilinx中的ROM构造查找表来计算sin和cos的方法探讨

    1.使用matlab制作.coe文件 查找表的构造 构造256点的正余弦表 exp(-j*2*pi*(0:255)/256),分别得到 cos和sin的查找表 matlab代码: 求sin fid = ...

  7. 转:小心,apc可能导致php-fpm罢工!

    原文来自于:http://www.searchtb.com/2014/02/apc-lock-php-fpm.html 最近线上产品出现了502错误.一般出现502错误,都是php-fpm 进程处理请 ...

  8. Hibernate中的事务隔离

    在我们的项目中,老发现程序报告sesssion is closed或者因数据已经被其他事务修改而导致当前事务无法提交,由于系统的运行用户最多也就几十个人,所以考虑使用严格的事务隔离来防止这种类型的问题 ...

  9. org.springframework.web.context.ContextLoaderListener

    ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息.因为它实现了ServletContextListener这个接口,在web ...

  10. C#中实现邮件发送功能

    public static int sendmail(string to, string body,string subject) { try { int nContain = 0; ///添加发件人 ...