数据结构: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. log4j是什么

    一.什么是log4jLog4j 是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务器.NT的事 件记录器.UNIX S ...

  2. 点击TextView浏览器打开指定网页

    直接上代码: /** * 点击跳转到版权页面 */ private void getCopyRight() { // TODO Auto-generated method stub TextView ...

  3. Spark Streaming 实现读取Kafka 生产数据

    在kafka 目录下执行生产消息命令: ./kafka-console-producer  --broker-list nodexx:9092 --topic  201609 在spark bin 目 ...

  4. int指令(软件中断指令)

    INT(软件中断指令)是CALL指令的一种特殊形式.call指令调用调用的子程序是用户程序的一部分,而INT指令调用的操作系统提供的子程序或者其他特殊的子程序. 中断服务子程序和标准过程的最大区别是 ...

  5. Linux系统学习笔记:文件描述符标志

    文件描述符标志的概念 文件描述符标志(目前就只有一个close-on-exec): 它仅仅是一个标志,当进程fork一个子进程的时候,在子进程中调用了exec函数时就用到了这个标志.意义是执行exec ...

  6. tabBar中tabBarItem选中颜色自定义设置

    1.在storyBoard中,选中tabBarController,设置tabBar中KeyPath中的(selectedImageTintColor)如图 2. 直接代码设置 tabBarContr ...

  7. block,inline,inline-block

    block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div>, <p>, <h1>, ...

  8. InstallShield 工程类型installscript,如何覆盖安装?

    原文 http://www.cnblogs.com/daocaorenbx/p/3305162.html 开始使用的msi工程类型.网上找了资料, 在kevin的博客里找到这条方法 可以通过删除Exe ...

  9. 8.2.5: Spring3.0新增的@DependsOn和@Lazy

    @DependsOn用于强制初始化其他Bean.可以修饰Bean类或方法,使用该Annotation时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean. @DependsOn ...

  10. #include <mutex>

    多线程初级 #include <iostream> #include <thread> #include <windows.h> #include <mute ...