数据结构:category(id, pid, name),对应:信息ID,父项ID,类别名

测试数据:

$aryCate = array(
array('id' => 1, 'pid' => 0, 'name' => 'Level0'),
array('id' => 2, 'pid' => 1, 'name' => 'Level0_1'),
array('id' => 3, 'pid' => 2, 'name' => 'Level0_1_1'),
array('id' => 4, 'pid' => 3, 'name' => 'Level0_1_1_1'),
array('id' => 5, 'pid' => 3, 'name' => 'Level0_1_1_2'), array('id' => 6, 'pid' => 0, 'name' => 'Level0'),
array('id' => 7, 'pid' => 6, 'name' => 'Level0_2'),
array('id' => 8, 'pid' => 7, 'name' => 'Level0_2_1'),
array('id' => 9, 'pid' => 8, 'name' => 'Level0_2_1_1'),
array('id' => 10, 'pid' => 8, 'name' => 'Level0_2_1_2'), array('id' => 11, 'pid' => 0, 'name' => 'Level0'),
array('id' => 12, 'pid' => 11, 'name' => 'Level0_3'),
array('id' => 13, 'pid' => 12, 'name' => 'Level0_3_1'),
array('id' => 14, 'pid' => 13, 'name' => 'Level0_3_1_1'),
array('id' => 15, 'pid' => 13, 'name' => 'Level0_3_1_2'), array('id' => 16, 'pid' => 0, 'name' => 'Level0'), array('id' => 17, 'pid' => 1, 'name' => 'Level0_2'),
);

+++++++++++++++++++++++++++++

代码:

/**
* 利用递归法获取无限极类别的树状数组
* @param array $ary 数据库读取数组
* @param int $pid 父级ID(顶级类别的pid为0)
* @param int $level 返回的树状层级
* @param int $i 层级起始值
* @return array 返回树状数组
*/
function aryTree($ary = array(), $pid = 0, $level = 10, $i = 1){ $arr = array(); foreach($ary as $rs){ if($rs['pid'] == $pid){ if($i <= $level){
$arr[$rs['id']] = $rs;
}else{
break;
} $n = $i;
$n++; $sub = aryTree($ary, $rs['id'], $level, $n);
empty($sub) OR $arr[$rs['id']]['sub'] = $sub; }else{
continue;
}
} return $arr;
}

PHP利用递归法获取多级类别的树状数组的更多相关文章

  1. Vijos P1448 校门外的树【多解,线段树,树状数组,括号序列法+暴力优化】

    校门外的树 描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的…… 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K= ...

  2. HDU - 1166 敌兵布阵 方法一:(线段树+单点修改,区间查询和) 方法二:利用树状数组

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  3. javascript中用闭包递归遍历树状数组

    做公司项目时,要求写一个方法,方法的参数为一个菜单数组集合和一个菜单id,菜单数组的格式为树状json,如下面所示: [{"id":28,"text":&quo ...

  4. 利用id来进行树状数组,而不是离散化以后的val HDU 4417 离线+树状数组

    题目大意:给你一个长度为n的数组,问[L,R]之间<=val的个数 思路:就像标题说的那样就行了.树状数组不一定是离散化以后的区间,而可以是id //看看会不会爆int!数组会不会少了一维! / ...

  5. codevs 4163 求逆序对的数目 -树状数组法

    4163 hzwer与逆序对  时间限制: 10 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description hzwer在研究逆序对. 对于数列{a},如果 ...

  6. hdu 3887 Counting Offspring(DFS序【非递归】+树状数组)

    题意: N个点形成一棵树.给出根结点P还有树结构的信息. 输出每个点的F[i].F[i]:以i为根的所有子结点中编号比i小的数的个数. 0<n<=10^5 思路: 方法一:直接DFS,进入 ...

  7. 递归法绑定文件夹到导航树&在指定文件夹下新建文件夹

    protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Request.QueryString[&q ...

  8. SharePoint开发——利用CSOM逐级获取O365中SharePoint网站的List内容

    博客地址:http://blog.csdn.net/FoxDave 本文介绍如何利用SharePoint客户端对象模型(.NET)逐级获取Office 365网站中List的内容,仅仅是示例,没有 ...

  9. 归并排序,递归法,C语言实现。

    利用归并排序法对序列排序的示意图(递归法): 一.算法分析:利用递归的分治方法:1.将原序列细分,直到成为单个元素:2.在将分割后的序列一层一层地按顺序合并,完成排序.细分通过不断深入递归完成,合并通 ...

随机推荐

  1. IE下图片切换的时候,图片总是切换不成功---根本问题是IE缓存图片

    作为WEB设计者,为了在网页展示上加强用户体验,经常会利用图象载入显示状态方法,这自然需要Image对象的onload事件. 在firefox浏览器下完成开发后,可是在IE浏览器中进行调试总不能被调用 ...

  2. 10Cookie

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. distance.c

    #include "stdio.h" #include "string.h" #include "math.h" #include &quo ...

  4. Amazon MWS 上传数据 (二) 构造请求

    上一篇文章提到了Amazon 上传数据有三个步骤,但是每个步骤都需要构造服务和构造请求,服务是一样的,请求各不相同:这个很容易理解,这三个步骤都需要和Amazon服务器交互,所以他们的服务构造是一样的 ...

  5. Go语言AST尝试

    Go语言有很多工具, goimports用于package的自动导入或者删除, golint用于检查源码中不符合Go coding style的地方, 比如全名,注释等. 还有其它工具如gorenam ...

  6. 各种HelloWorld

    http://blog.csdn.net/whxaing2011/article/details/20736759 ES总结: http://www.cnblogs.com/sunxucool/p/3 ...

  7. mysql中timestamp,datetime,int类型的区别与优劣

    转载请注明来自 souldak,微博: @evagle 以下内容 整合筛选自互联网: int 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不 ...

  8. 面向连接的socket数据处理过程以及非阻塞connect问题

    对于面向连接的socket类型(SOCK_STREAM,SOCK_SEQPACKET)在读写数据之前必须建立连接,首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建socket之后 ...

  9. 全国计算机等级考试二级教程-C语言程序设计_第10章_字符串

    字符型指针数组 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //参数中,int a ...

  10. 解析word中的表格

    由于word表格的特殊性,其本身中的数据本来就不够完善,不能够很好的知道其具体的合并.跨行的相关属性,表格的单位可能是PT或者是百分比,并且是共存的,为处理带来了一定的负担,本代码实现了一个将Word ...