前段时间做一个小项目的时候用到了无限级分类,当时也忘的差不多了,于是就去网上查资料学,下面是我的学习笔记

数据格式:

array (size=5)
1 =>
array (size=6)
'id' => string '1' (length=1)
'pid' => string '0' (length=1)
'name' => string '青年之声1' (length=13)
'description' => string '' (length=0)
'create_time' => string '2017-04-02 15:38:06' (length=19)
'del' => string '0' (length=1)
2 =>
array (size=6)
'id' => string '2' (length=1)
'pid' => string '1' (length=1)
'name' => string '青年之声2' (length=13)
'description' => string '' (length=0)
'create_time' => string '2017-04-02 15:38:06' (length=19)
'del' => string '0' (length=1)
3 =>
array (size=6)
'id' => string '3' (length=1)
'pid' => string '2' (length=1)
'name' => string '青年之声3' (length=13)
'description' => string '' (length=0)
'create_time' => string '2017-04-02 15:38:06' (length=19)
'del' => string '0' (length=1)
4 =>
array (size=6)
'id' => string '4' (length=1)
'pid' => string '3' (length=1)
'name' => string '青年之声4' (length=13)
'description' => string '' (length=0)
'create_time' => string '2017-04-02 15:38:06' (length=19)
'del' => string '0' (length=1)
5 =>
array (size=6)
'id' => string '5' (length=1)
'pid' => string '4' (length=1)
'name' => string '青年之声5' (length=13)
'description' => string '' (length=0)
'create_time' => string '2017-04-02 15:38:06' (length=19)
'del' => string '0' (length=1)

非递归算法

$tree = array();
foreach ($items as $item) {
if (isset($items[$item['pid']])) {
$items[$item['pid']]['childs'][] = &$items[$item['id']];
} else {
$tree[] = &$items[$item['id']];
}
}

递归算法

function getChild($id) {
$tree = [];
$childs = Columns::find()->where(['pid' => $id, 'del' => 0])->asArray()->all();
if ($childs) {
foreach ($childs as $child) {
$childTree = getChild($child['id']);
if ($childTree) {
$child['children'] = $childTree;
}
$tree[] = $child;
}
}
return $tree;
}

最终结果

PHP实现无限级分类的更多相关文章

  1. PHP无限级分类的实现(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...

  2. 一道无限级分类题的 PHP 实现

    今天有网友出了道题: 给出如下的父子结构(你可以用你所用语言的类似结构来描述,第一列是父,第二列是子),将其梳理成类似如图的层次父子结构. origin = [('A112', 'A1122'), ( ...

  3. (实用篇)PHP递归实现无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...

  4. php利用递归函数实现无限级分类

    相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径.各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了. 什么是无限级分类? 无限级分类是 ...

  5. PHP+MySQL无限级分类(非递归)

    要实现无限级分类,递归一般是第一个也是最容易想到的,但是递归一般被认为占用资源的方法,所以很多系统是不考虑使用递归的 本文还是通过数据库的设计,用一句sql语句实现 数据库字段大概如下: 字段 说明 ...

  6. PHP无限级分类-递归(不推荐)

    [http://www.helloweba.com/view-blog-204.html] 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢? ...

  7. PHP无限级分类生成树实例代码

    分享一例php无限级分类生成树的代码,学习下php无限级分类的实现方法,有需要的朋友参考下.   一段非常精简的PHP无限极分类生成树方法,巧在引用.   例子,php实现无限级分类.   代码示例: ...

  8. php非递归无限级分类.

    项目需要.递归无限级分类效率实在太低.理了半天思路写的. 分类越多效率越高. /** * 单次循环返回无限极分类嵌套 * @param array $data 操作的数组 * @param strin ...

  9. 转:php+mysql菜单无限级分类(非递归)

    php+mysql无限级分类(非递归) 参考:http://www.chhua.com/web-note3244

  10. SQL 无限级分类语句

    原文:SQL 无限级分类语句 原表数据为: 此处用到了with关键字,在程序中也可以用递归实现,但觉得还是没有一条sql方便 with tb (ID,Name,ParentID,Sort) as( s ...

随机推荐

  1. 利用callKit实现电话防骚扰

    callKit框架是ios10之后更新的一个框架,代替了原来的CoreTelephony.framework,使用CallKit可以实现电话的拦截 首先创建一个项目之后,创建一个target,选择Ca ...

  2. Unity调用Android的两个方式:其一、调用jar包

    unity在Android端开发的时候,免不了要调用Java:Unity可以通过两种方式来调用Android:一是调用jar.二是调用aar. 这篇文章主要讲解怎么从无到有的生成一个jar包,然后un ...

  3. Java设置Excel有效性

    XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet("Excel"); String[] ...

  4. border-raduis 在IE8中的兼容性问题

    border-raduis 是css3新增加的属性,我们运用起来也很方便,效果很好,但是在IE8以及之前的ie版本并不支持这个属性,怎么解决这个问题呢? 1.切成背景 这也是我经常用到的方法,虽然说有 ...

  5. sass入门学习篇(二)

    从语法开始但是语法也不是一两句的事情,首先看基本的导入,使用 一,sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号:另一种就是我们这里使用的scss文件,建议scss. 二,导入 使 ...

  6. [效率]Source insight标题栏中路径显示完整路径的方法

    使用Source insight的时候,默认是不显示文件的全路径的,这一点有那么一段时间让我很纠结,因为很多函数都是基于硬件架构的,一个函数有很多时间.查看文件的全路径是非常有必要,可以通过以下实现: ...

  7. CKEditor不借助CKFinder实现图片上传(.net版 ashx实现)

    参考博客:http://blog.csdn.net/mydwr/article/details/8669594 本人版本:4.4.6 打开文件:ckeditor/plugins/image/dialo ...

  8. Java scheduled executor

    A typical usage of java scheduled executor looks like this ScheduledExecutorService executor = Execu ...

  9. NSA Fuzzbunch分析与利用案例

    Shadow Brokers泄露出一份震惊世界的机密文档,其中包含了多个 Windows 远程漏洞利用工具.本文主要介绍了其中一款工具Fuzzbunch的分析与利用案例 1 整体目录介绍 解压EQGR ...

  10. WPF 杂谈——自定义控件

    如果只是使用现有的WPF控件的话,是很难满足当前社会多复杂的业务.所以用户自己订制一系列控件也是一种不可避免的情势.WPF在控制方面分为俩种:用户控件和自定义控件.相信看过前面章节的就明白他们俩者之间 ...