Php 无限极分类 递归查询 获取所有子类和父类

$cats = Db::name(‘cat’)->select()->toArray();
c a t s = t r e e ( cats = tree( cats=tree(cats);

1
2

在这里插入图片描述

function tree( d a t a , data, data,pid=0,$level=0){

	static $arr = [];
	foreach($data as $k=>$v){
		if($v['pid']==$pid){
			$v['cat_name'] = str_repeat('|----',$level).$v['cat_name'];
			$arr[] = $v;
			unset($data[$k]);
			tree($data,$v['id'],$level+1);
		}
	}
	return $arr;
	
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14

递归就是先查找顶级分类,然后通过递归查找其顶级分类下的子类。
如果有第二个顶级分类的话,他会先unset( d a t a [ data[ data[k])先删除已经遍历过的,就能得到第二个顶级分类

v [ ′ c a t n a m e ′ ] = s t r r e p e a t ( ′ ∣ − − − − ′ , v['cat_name'] = str_repeat('|----', v[catname]=strrepeat(,level).$v[‘cat_name’];

1

是先判断是顶级分类就不用|----,不是的话,下一级分类就开始加|----了,在下一级的话,就|----|----

if( v [ ′ p i d ′ ] = = v['pid']== v[pid]==pid){

1

的意思是看$v[‘pid’]是不是等于0.代表顶级分类啊

tree( d a t a , data, data,v[‘id’],$level+1);

1

查找顶级分类其下的子类(递归)$level+1,代表顶级分类的下一级

static $arr = [];

1

为什么静态,因为不会覆盖嘛

$arr[] = $v;

1

找到了就放到数组里面。比较方便一点。比较一个数组进来进行递归操作比较麻烦

– phpMyAdmin SQL Dump
– version 4.8.5
– https://www.phpmyadmin.net/

– 主机: localhost
– 生成日期: 2022-05-23 18:02:43
– 服务器版本: 5.7.26
– PHP 版本: 7.3.4

SET SQL_MODE = “NO_AUTO_VALUE_ON_ZERO”;
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = “+00:00”;

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT /;
/
!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS /;
/
!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION /;
/
!40101 SET NAMES utf8mb4 */;


– 数据库: kkk



– 表的结构 cat

CREATE TABLE cat (
id int(10) UNSIGNED NOT NULL,
pid int(10) UNSIGNED NOT NULL,
cat_name varchar(50) COLLATE utf8_unicode_ci NOT NULL,
cat_img varchar(100) COLLATE utf8_unicode_ci NOT NULL,
is_show tinyint(4) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


– 转存表中的数据 cat

INSERT INTO cat (id, pid, cat_name, cat_img, is_show) VALUES
(1, 0, ‘手机’, ‘/storage/category/bc\91231321a92a7a6a6db99fa7db8f37.png’, 1),
(7, 0, ‘厨具’, ‘/storage/category/01\c7232eb931fa3dd40f8b4946bd27fa.jpg’, 1),
(8, 7, ‘电饭锅’, ‘/storage/category/2b\edd18255c4efcfc4a9982ce33671be.jpg’, 1),
(9, 0, ‘服装’, ‘/storage/category/f6\655e2bed6b7bea027fb69a3c11a27c.jpg’, 1),
(10, 9, ‘女装’, ‘/storage/category/84\f9e13fa3a6093990bf3de4e2da74a0.jpg’, 1),
(11, 1, ‘华为’, ‘/storage/category/b4\a403d9874ed426bd5210a2f42c33f0.jpg’, 1);


– 转储表的索引


– 表的索引 cat

ALTER TABLE cat
ADD PRIMARY KEY (id);


– 在导出的表使用AUTO_INCREMENT


– 使用表AUTO_INCREMENT cat

ALTER TABLE cat
MODIFY id int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=12;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT /;
/
!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS /;
/
!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

————————————————
版权声明:本文为CSDN博主「贵哥的编程之路(热爱分享)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37805832/article/details/124932037

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值