PHP的无限极分类

一、使用数据表

添加from字段

id  name   parent_id     from
1 中国 0 0
2 广东 1 0,1
3 深圳 2 0,1,2
4 龙华 3 0,1,2,3
5 湖南 1 0,1
6 长沙 5 0,1,5
7 岳麓 6 0,1,5,6
8 安微 1 0,1
9 亳州 8 0,1,8

表设计

CREATE TABLE IF NOT EXISTS jk_catelog(
id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30) NOT NULL DEFAULT '' UNIQUE COMMENT '分类名',
pid INT(10) NOT NULL DEFAULT 0 COMMENT '父id',
from VARCHAR(255) NOT NULL DEFAULT '' COMMENT '目录路径',
created INT(10) NOT NULL DEFAULT 0 COMMENT '创建时间'
) #测试一级分类
INSERT INTO jk_catelog VALUES('','中国','0','','1490872322')

二、使用引用

<?php
$data[1] = array('id'=>'1','name'=>'一级目录A','pid'=>'0','sort'=>'1');
$data[2] = array('id'=>'2','name'=>'一级目录B','pid'=>'0','sort'=>'2');
$data[3] = array('id'=>'3','name'=>'一级目录C','pid'=>'0','sort'=>'3');
$data[4] = array('id'=>'4','name'=>'一级目录D','pid'=>'0','sort'=>'4');
$data[5] = array('id'=>'5','name'=>'二级目录A-1','pid'=>'1','sort'=>'1');
$data[6] = array('id'=>'6','name'=>'二级目录A-2','pid'=>'1','sort'=>'2');
$data[7] = array('id'=>'7','name'=>'二级目录A-3','pid'=>'1','sort'=>'3');
$data[8] = array('id'=>'8','name'=>'二级目录B-1','pid'=>'2','sort'=>'1');
$data[9] = array('id'=>'9','name'=>'二级目录B-2','pid'=>'2','sort'=>'2');
$data[10] = array('id'=>'10','name'=>'二级目录B-3','pid'=>'2','sort'=>'3');
$data[11] = array('id'=>'11','name'=>'二级目录C-1','pid'=>'3','sort'=>'2');
$data[12] = array('id'=>'12','name'=>'二级目录D-1','pid'=>'4','sort'=>'1');
$data[13] = array('id'=>'13','name'=>'二级目录D-2','pid'=>'4','sort'=>'2');
$data[14] = array('id'=>'14','name'=>'三级目录A-2-1','pid'=>'6','sort'=>'1');
$data[15] = array('id'=>'15','name'=>'三级目录A-2-2','pid'=>'6','sort'=>'2');
$data[16] = array('id'=>'16','name'=>'三级目录C-1-1','pid'=>'11','sort'=>'1');
$data[17] = array('id'=>'17','name'=>'三级目录B-2-1','pid'=>'9','sort'=>'2'); function printTree($list,$key='_child',$lever=0){
$tree = [];
foreach ($list as $id=>$value){
if( $value['pid'] == $lever ){
$tree[] = &$list[$id];
}else{
$list[$value['pid']][$key][] =&$list[$id];
}
}
return $tree;
} $tree = printTree($data);
print_r($tree); /*******************打印*************************/
echo "<br/><br/><br/>";
function getList($data,$level = 0)
{
$html = '';
foreach ($data as $item){
for ($i=0;$i<$level;$i++){
$html .= '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
}
$html .= $item['name'].'<br>';
if( isset($item['_child']) ){
$html .= getList($item['_child'],$level+1);
}
}
return $html;
} echo getList($tree);

显示效果

一级目录A
二级目录A-1
二级目录A-2
三级目录A-2-1
三级目录A-2-2
二级目录A-3
一级目录B
二级目录B-1
二级目录B-2
三级目录B-2-1
二级目录B-3
一级目录C
二级目录C-1
三级目录C-1-1
一级目录D
二级目录D-1
二级目录D-2

三、使用递归

function make_tree($list,$pk='id',$pid='pid',$child='_child',$root=0){
$tree=array();
foreach($list as $key=> $val){
if($val[$pid]==$root){
//获取当前$pid所有子类
unset($list[$key]);
if(! empty($list)){
$child=make_tree($list,$pk,$pid,$child,$val[$pk]);
if(!empty($child)){
$val['_child']=$child;
}
}
$tree[]=$val;
}
}
return $tree;
} $tree = make_tree($data); print_r($tree);

四、根据id获取所有子分类

function getChildIds($list, $pid, &$ids = [], $field = 'id', $parent_field = 'pid')
{
foreach ($list as $v) {
if ($v[$parent_field] == $pid) {
$ids[] = $v[$field];
getChildIds($list, $v[$field], $ids);
}
}
return $ids;
}

PHP的无限极分类的更多相关文章

  1. php无限极分类以及递归(thinkphp)

    php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...

  2. js实现无限极分类

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...

  3. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

    在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...

  4. PHP无限极分类

      当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱, ...

  5. PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂

    当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究.   到网上一搜php无限极分类,很多,但好多都是一 ...

  6. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现

    今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...

  7. 谈一次php无限极分类的案例

    作者:白狼 出处:http://www.manks.top/php_tree_deep.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追 ...

  8. PHP无限极分类生成树方法,无限分级

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...

  9. php之无限极分类

    首先建立分类信息表: CREATE TABLE IF NOT EXISTS `category` ( `categoryId` smallint(5) unsigned NOT NULL AUTO_I ...

  10. PHP无限极分类实现

    简单版的PHP生成无限极分类代码.其中包括了数据库设计.以及输出分类HTML代码. SQL代码 CREATE TABLE `district` ( `id` int(10) unsigned NOT ...

随机推荐

  1. <vue初体验> 基础知识 4、 vue的生命周期

    系列导航 <vue初体验> 一. vue的引入和使用体验 <vue初体验> 二. vue的列表展示 <vue初体验> 三. vue的计数器 <vue初体验&g ...

  2. PostMan——安装使用教程(图文详解)

    https://blog.csdn.net/m0_61843874/article/details/123324727 postman使用教程1-安装与使用: https://www.cnblogs. ...

  3. C#设计模式16——中介者模式的写法

    是什么: 中介者模式是一种行为型设计模式,它定义了一个中介者对象来封装一系列对象之间的交互.中介者模式可以使得对象间的交互更加松耦合,避免了对象之间的直接依赖,从而使系统更加灵活.易于扩展和维护. 为 ...

  4. The project description file (.project) for XXX is missing

    在STS中切换项目分支的时候,出现一个项目打不开了,提示:The project description file (.project) for XXX is missing 试了下网上的方法都没有解 ...

  5. git仓库之gogs安装(docker版/二进制版)

    二进制安装gogs tar zxf gogs_0.11.91_linux_amd64.tar.gz -C /data/gogs chown -R www.www /data/gogs su - www ...

  6. 针对docker中的mongo容器增加鉴权

    1. 背景 业务方的服务器经安全检查,发现以docker容器启动的mongo未增加鉴权的漏洞,随优化之 2. 配置 mongo以docker compose方式启动,镜像的版本号为4.2.6,dock ...

  7. HashMap集合遍历随机性问题分析

    一.原因分析 1.1 HashMap对象的遍历 HashMap的遍历是通过此类中字段table数组进行顺序遍历,原因如下所示: 1 #HashMap 迭代遍历源码 2 public final boo ...

  8. 有了Composition API后,有些场景或许你不需要pinia了

    前言 日常开发时有些业务场景功能很复杂,如果将所有代码都写在一个vue组件中,那个vue文件的代码量可能就几千行了,维护极其困难.这时我们就需要将其拆分为多个组件,拆完组件后就需要在不同组件间共享数据 ...

  9. 使用Grafana + jmx 监控 kafka3.5 的过程

    使用Grafana + jmx 监控 kafka3.5 的过程 摘要 周五一边进行数据库监控, 同时想着部署一套监控系统. 能够监控一下kafka等中间件 结果不想自己遇到了很多坑. 下午有同事语音告 ...

  10. [转帖]在麒麟linux上安装Postgresql12.5

    https://jimolonely.github.io/tech/linux/install-postgresql-kylin/ 本文主要实践在麒麟V10版本上通过源码编译安装PostgreSQL1 ...