数据结构: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. 什么是HTTP Keep-Alive呢?

    在通过调试工具查看网络请求的时候,通常在response header能看到类似下面这种:Keep-Alive: timeout=10, max=94 .那么Keep-Alive到底是什么呢? HTT ...

  2. Angular初级入门

    1:jquery :库 -一般是封装了一些方法 -我们去调用他的这些方法分 2:angular:框架 -框架是提供了一些规则或者模式 -我们是根据这一种规则或者模式去写代码 -然后接下来就由angul ...

  3. [MFC]解决回车键 ESC 默认关闭窗口的一般方法

    在一般情况下编写的对话框程序,用户在运行的时候,如果不注意按下了ENTER或者ESC键,程序就会立刻退出,之所以会这样,是因为按下Enter键时,Windows就会自动去找输入焦点落在了哪一个按钮上, ...

  4. grep 和 perl多个条件匹配

    grep和perl多个条件匹配使用‘|’作为分割符号 grep -E 'abc|def' perl if(/abc|def/)

  5. NoSQL的价值到底在哪里?

    关系型数据库的价值 持久化数据:通过数据库来保存数据 处理并发:通过事务方式处理并发 集成:共享数据库集成,多个应用程序可以同时访问同一份数据 标准模型:前几种功能已经成标准,开发人员学习成本低,虽然 ...

  6. c语常用算法库(1)

    1,冒泡排序 #include <iostream> using namespace std; int main(){ ]; // 一共n个数, n不超过1000. a用来保存这些数. , ...

  7. php实现多表(四表)连接

    <?php include_once "DBHelper.php"; define('HOST', '127.0.0.1'); define('USER', 'root'); ...

  8. skynet配置文件

    启动skynet需要一个配置文件 我们看下examples/config root = "./"         表示根目录是skynet启动时的目录thread = 8     ...

  9. NET Core 介绍

    NET Core 介绍 标签: ASP.NETCore 1. 前言 2. ASP.NET Core 简介 2.1 什么是ASP.NET Core 2.2 ASP.NET Core的特点 2.3 ASP ...

  10. Qt5.3.0 for android windows平台下搭建及demo(虫子的博客)

    ----我的生活,我的点点滴滴!! 部门领导突然心血来潮,想在android平台上做应用,但是我们大多产品属于嵌入式(本吊只负责写写应用,苦比的被强行顶过来搞这,由于这还得领导吵了一架,架虽然吵完了, ...