ThinkPHP无限级分类(递归)
代码演示
没什么可说的直接看代码
<?php
namespace app\controller;
class Category
{
//模拟假数据
protected static function arr()
{
$rows = [
[
'id' => '1',
'name' => '一级菜单',
'pid' => '0',
'path' => '0',
],
[
'id' => '2',
'name' => '二级菜单',
'pid' => '0',
'path' => '0',
],
[
'id' => '3',
'name' => '一级菜单-1',
'pid' => '1',
'path' => '0-1',
],
[
'id' => '4',
'name' => '二级菜单-1',
'pid' => '2',
'path' => '0-2',
],
[
'id' => '5',
'name' => '一级菜单-1-1',
'pid' => '3',
'path' => '0-1-3',
],
[
'id' => '6',
'name' => '二级菜单-1-1',
'pid' => '4',
'path' => '0-2-4',
],
[
'id' => '7',
'name' => '二级菜单-1-2',
'pid' => '4',
'path' => '0-2-4',
],
[
'id' => '8',
'name' => '三级菜单',
'pid' => '0',
'path' => '0',
],
[
'id' => '9',
'name' => '二级菜单-1-3',
'pid' => '4',
'path' => '0-2-4-6',
],
[
'id' => '10',
'name' => '三级菜单-1',
'pid' => '8',
'path' => '0-8',
],
[
'id' => '11',
'name' => '一级菜单-1-4',
'pid' => '5',
'path' => '0-8',
],
];
return $rows;
}
public function index()
{
//获取从第0级下的所有分类(pid==0)
$list = $this->build_tree(0);
return json($list);
}
/**
* 递归子级
* @param $list
* @param $id
* @return array
*/
public function findChild($list, $id)
{
$child = [];
foreach ($list as $key => $item) {
//如果pid等于传进来
if ($item['pid'] == $id) {
$child[] = $item;
}
}
return $child;
}
/**
* 获取当前级别的子级
* @param $root_id /第几层
* @return null
*/
public function build_tree($root_id)
{
//获取假数据
$list = $this->arr();
//查找指定级数
$tree = $this->findChild($list, $root_id);
if (empty($tree)) {
return null;
}
//遍历获取到的层级得到下级分类
foreach ($tree as $key => $item) {
//递归调用自己 查找每个元素下的分类
$child = $this->build_tree($item['id']);
//如果有子类就放入数组中
if ($child != null){
$tree[$key]['child'] = $child;
}
}
return $tree;
}
}
预览结果

ThinkPHP无限级分类(递归)的更多相关文章
- C#无限级分类递归显示示例
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="RoleDemo20150305 ...
- PHP无限级分类-递归(不推荐)
[http://www.helloweba.com/view-blog-204.html] 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢? ...
- ThinkPHP无限级分类
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ ...
- 使用Python3.7+Django2.0.4配合vue.js2.0的组件递归来实现无限级分类(递归层级结构)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_133 所谓的无限极分类是啥?其实简单点说就是一个人类可以繁衍出多个后代,然后一个后代又可以分另外多个后代这样无限繁衍下去(可以想象 ...
- thinkphp 无限级分类的思想 分析
$list=$cate->field("id,name,pid,path,concat(path,'-',id) as bpath")->order('bpath')- ...
- PHP 无限级分类(递归)
网上有很多,这是我自己做测试用的$arr = array( array('id'=>1,'name'=>'电脑','pid'=>0), array('id'=>2,'name' ...
- thinkphp框架中使用递归实现无限级分类
无限级分类在我们开发中显得举足轻重,会经常被人问到,而一般会用递归的方法来实现,但是递归又会难倒一批人.今天博主分享的这个稍微有点基础的phper都能学会,希望大家能喜欢. 一.先建立对应的数据库和表 ...
- thinkphp中如何实现无限级分类?
thinkphp中如何实现无限级分类? 一.总结 1.数据表设计+递归算法 二.php实现无限级分类实例总结 1.数据库数据如下: 2.任务需求:给一个id,求自己和所有父亲. 3.实现代码如下:th ...
- PHP无限级分类的实现(不使用递归)
无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...
随机推荐
- 在Android、iOS、Web多平台使用AppGallery Connect性能管理服务
性能管理(App Performance Management,简称APM)是华为应用市场AppGallery Connect(简称AGC)质量系列服务中的其中一项,可以提供分钟级应用性能监控能力,支 ...
- 小白学PID-以大疆M3508、M2006为例
前言: 最近用到了大疆的直流无刷(BLDC)减速电机M3508和M2006.做RoboMaster比赛的同学应该对它们很熟悉,这两款电机质量都不错,配套电调C620.C610功能强大,应用场景广泛.当 ...
- Smith Numbers(分解质因数)
Smith Numbers Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14173 Accepted: 4838 De ...
- Unity基础-脚本生命周期
理解Unity脚本的生命周期对游戏开发很重要,这篇文章对生命周期做一个记录和总结.Unity的脚本生命周期(消息),也就是在脚本运行时,自动并且按顺序执行的一系列函数.在unity官网中有对生命周期详 ...
- 1.8.8- textarea控件(文本域)
如果需要大量的信息,就需要用到<textarea>标签,通过testarea控件可以轻松创建多行文本输入框,其基本语法如下: <textarea cols="每行的字数&q ...
- TP5 验证-内置规则
系统内置的验证规则如下: 格式验证类 require 验证某个字段必须,例如: 'name'=>'require' number 或者 integer 验证某个字段的值是否为数字(采用filte ...
- 【JDK8】Java8 优雅的异步调用API CompletableFuture
1.CompletableFuture是什么? CompletableFuture是JDK8的新特性之一,是异步调用相关的API,用于简化异步调用,提高异步调用的效率 2.CompletableFut ...
- hdu4118
题意: 给你一颗无向带权树,每个定点上有一个人,问所有定点都不在自己位置上的最长路径总和是多少.. 思路: 其实很简单,贪心的想下,既然要求全局最大,那么对于每一条边用的次 ...
- Windows核心编程笔记之错误处理
0x01 GetLastError() 函数用于获取上一个操作的错误代码 #include <Windows.h> #include <iostream> using name ...
- C++ STL 思维导图,脑图,树形图。
https://blog.csdn.net/weixin_41743247/article/details/90635931