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.实现原理 在 ...
随机推荐
- JavaScript设计模式(一):单例模式
单例模式的定义与特点 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式.例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗 ...
- ASP.NET Core扩展库之Http请求模拟
如今,完全独立的业务应用几乎不存在,不管是在企业内部微服务之间的调用,还是与外部第三方服务的调用,Http的API交互是常见的场景,这些实际情况给我们的开发带来了比较大的挑战,一是第三方服务可能会牵制 ...
- 【SpringBoot源码分析】-Bean的加载过程
-- 以下内容均基于2.1.8.RELEASE版本 在<SpringBoot启动过程的分析>系列文章中简要的对SpringBoot整体的启动流程作了梳理,但并未针对诸多细节进行分析.前面的 ...
- G - River Hopscotch(二分)
Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully ...
- 从苏宁电器到卡巴斯基第16篇:我在苏宁电器当营业员 VIII
其实不想走,其实很想留 我在之前的故事中说过,在大四的时候,我其实是想考研的,但是看了一段时间的书以后,发现自己实在不是那块料,主要是数学实在是学不明白,那么也就只能作罢了.而后来面试中石化的时候,尽 ...
- 如何利用C++的time头文件获取系统时间
C++提供了time.h头文件进行时间编辑操作,可以把时间格式化进tm结构体,方便使用.MFC框架中的ctime类就是基于time.h封装的. 代码样例: #include <iostream& ...
- UVA11624大火蔓延的迷宫
题意: 给1个n*m的网格,上面有的点能走,有的点不能走(墙),然后有的点是火源,火源和人一样,每次都是上下左右四个方向蔓延,速度一样是1,火也不可以从墙上跨过去,给你人的起点,终点是只要走到 ...
- HTTP参数污染(HPP)漏洞
HPP(HTTP参数污染) HPP是HTTP Parameter Pollution的缩写,意为HTTP参数污染.原理:浏览器在跟服务器进行交互的过程中,浏览器往往会在GET/POST请求里面带上参数 ...
- Portswigger web security academy:DOM-based vulnerabilities
DOM-based vulnerabilities 目录 DOM-based vulnerabilities 1 - DOM XSS using web messages 2 - DOM XSS us ...
- transformer模型转torchscript格式
from transformers import BertModel, BertTokenizer, BertConfig import torch enc = BertTokenizer.from_ ...