PHP的无限极分类
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 .= ' ';
}
$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的无限极分类的更多相关文章
- php无限极分类以及递归(thinkphp)
php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...
- js实现无限极分类
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
- PHP无限极分类
当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱, ...
- PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂
当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一 ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现
今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...
- 谈一次php无限极分类的案例
作者:白狼 出处:http://www.manks.top/php_tree_deep.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追 ...
- PHP无限极分类生成树方法,无限分级
你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...
- php之无限极分类
首先建立分类信息表: CREATE TABLE IF NOT EXISTS `category` ( `categoryId` smallint(5) unsigned NOT NULL AUTO_I ...
- PHP无限极分类实现
简单版的PHP生成无限极分类代码.其中包括了数据库设计.以及输出分类HTML代码. SQL代码 CREATE TABLE `district` ( `id` int(10) unsigned NOT ...
随机推荐
- prettier配置项说明
Prettier 特点 一键改变代码风格,无需改变开发风格 => 1. 安装Node 环境 自行安装 => 2. 安装 Prettier 全局安装npm install --global ...
- SIP没有摘机消息可以通话吗
概述 SIP流程中,A路没有收到摘机的200 OK响应消息可以通话吗? 客户反馈的问题千奇百怪,公共互联网的问题同样百转千回,让你欲罢不能,头秃方休. 客户报故障,问题描述是这样的,我用号码A打给号码 ...
- python 基础 | 实现微秒级计时
搬运一个计时代码: import datetime s = datetime.datetime.now() # 开始 # do something e = datetime.datetime.now( ...
- @JsonIgnore 失效没起作用及 @JSONField(serialize = false)
项目中需要对接口返回的某一个字段进行屏蔽,返回给前端响应的时候,不显示某个字段. 第一时间想到在实体类屏蔽的属性字段上添加@JsonIgnore注解,但添加之后并没有起作用. 在网上搜索了下,使用 @ ...
- 国庆学go,完成了博客基本功能,迫不及待的发布上线了
大家好,我是沙漠尽头的狼. 国庆7天,利用带娃之余的空闲时间学习了go,并做了一个不是很完善的博客前台网站. 网站发布地址:https://go.dotnet9.com 源码 边做边上传Github, ...
- 使用markdown语法做笔记,相比txt多了很多样式
- DDP运行报错(单卡无错):ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: 1)
使用DDP时出现错误,但是单卡跑无错误. 错误记录如下: RuntimeError: Expected to have finished reduction in the prior iteratio ...
- 改变vs私有变量的命名规范
vs默认情况下,private 变量是不带下划线开头的,可以通过设置命名规范,增加下划线开头规则. 点击菜单:[工具]->[选项]->[文本编辑器]->[c#]->[代码样式] ...
- Linux-磁盘-di-目录查询-du-tree
- [转帖]《Linux性能优化实战》笔记(25)—— 总结:Linux 性能工具速查
一. 性能工具速查 在梳理性能工具之前,首先给你提一个问题,那就是,在什么情况下,我们才需要去查找.挑选性能工具呢? 其实在我看来,只有当你想了解某个性能指标,却不知道该怎么办的时候,才会想到,&qu ...