php 怎么进行无限级查询,php如何实现无限级分类?
在php中,可以利用递归算法并结合mysql数据表来实现无限级分类。下面本篇文章给大家介绍一下实现方法,有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
什么是无限级分类?
无限级分类是一种分类技巧,例如部门组织,文章分类,学科分类等常用到无限级分类,将其简单理解成分类就好了。其实我们仔细想一下,生活中的分类简直太多了,衣服可以分为男装和女装,也可以分为上衣和裤子,也可以根据年龄段分类。分类无处不在,分类显得“无限”。我这里就不说无限分类的必要性了。
无限级分类原理简介
无限分类看似"高大上",实际上原理是非常简单的 。无限分类不仅仅需要代码的巧妙性,也要依托数据库设计的合理性。要满足无限级分类,数据库需要有两个必须的字段,id,pid。id用来标识自身,而pid则是用来表明父级id。也就是说,每个分类记录不仅描述了自身,还描述了与其关心最为紧密的另一个id。看似复杂的事情被这样一个小技巧解决了。
闲话不多说,该展现本文的实例了。
作为一个狂热海贼迷,这篇的实例我就以《海贼王》人物组织做案例。
数据库准备:
建表onepiece:create table onepiece(
id int auto_increment,
pid int not null,
name varchar(225) not null,
primary key(id)
);
插入测试数据:insert onepiece values
(1,0,'海军'),
(2,0,'海贼'),
(3,0,'革命军'),
(4,1,'青雉'),
(5,1,'赤犬'),
(6,1,'黄猿'),
(7,2,'四皇'),
(8,2,'七武海'),
(9,2,'草帽海贼团'),
(10,9,'索隆'),
(11,7,'香克斯'),
(12,8,'多弗朗明哥'),
(13,8,'克洛克达尔');
这里还是科普下海贼王里面的设定:世界分为三大阵营:海军,海贼,革命军。海军有大将:青雉,赤犬,黄猿。海贼有:四皇,七武海,草帽海贼团。四皇有香克斯,七武海有多弗朗明哥,克洛克达尔,草帽海贼团有索隆。(打个广告:海贼王真的很好看)。
最终目的:
我们今天制作的是两种形式的无限级分类形式,一种是下拉列表式,一种则是导航Link式的。直接上效果图了:
下拉列表式
导航Link式
实例代码:
我封装了一个Unlimited类,用来调用diaplayList()展现下拉列表形式,调用diaplayLink展现导航Link分类。也可以增加(addNodes())和删除(deleteNodes)分类。<?php
class Unlimited{
protected $mysqli;
public function __construct($config){
$this->mysqli=new mysqli($config['host'],$config['user'],$config['pwd']);
$this->mysqli->select_db($config['db']);
$this->mysqli->set_charset('utf8');
if ($this->mysqli->connect_errno) {
echo $this->mysqli->connect_error;
}
}
private function getList($pid=0,&$result=array(),$spac=0){
$spac=$spac+2;
$sql="select * from onepiece where pid={$pid}";
$rs=$this->mysqli->query($sql);
while($row=$rs->fetch_assoc()) {
$row['name']=str_repeat('  ',$spac).$row['name'];
$result[]=$row;
$this->getList($row['id'],$result,$spac);
}
return $result;
}
/**
* 展现下拉列表式分类
* @return [type]
*/
public function displayList(){
$rs=$this->getList();
$str="";
foreach ($rs as $key => $val) {
$str.="{$val['name']}";
}
$str.="";
return $str;
}
private function getLink($cid,&$result=array()){
$sql="select * from onepiece where id={$cid}";
$rs=$this->mysqli->query($sql);
if($row=$rs->fetch_assoc()){
$result[]=$row;
$this->getLink($row['pid'],$result);
}
return array_reverse($result);
}
/**
* 展现导航Link
* @param [type] $cid [description]
* @return [type] [description]
*/
public function displayLink($cid){
$rs=$this->getLink($cid);
$str='';
foreach ($rs as $val) {
$str.="{$val['name']}>";
}
return $str;
}
/**
* 增加分类
* @param [type] $pid 父类id
* @param [type] $name 本类名
*/
public function addNodes($pid,$name){
$sql="insert into onepiece values('',{$pid},'".$name."')";
if($this->mysqli->query($sql)){
return true;
}
}
/**
* 删除分类
* @param [type] $id 本类id
* @return [type]
*/
public function deleteNodes($id){
$sql="select * from onepiece where pid ={$id}";
$rs=$this->mysqli->query($sql);
if($row=$rs->fetch_assoc()){
$mes="还有子元素,请勿删除";
}else{
$sql="delete from onepiece where id={$id}";
if($this->mysqli->query($sql)){
$mes="删除成功";
}
}
return $mes;
}
}
类中函数主要采取了递归函数的方法,如果理解深刻理解递归函数,其余的部分也就水到渠成了。后面的php递归函数的三种方法详细介绍了php递归函数的原理。
更多相关知识,请访问 PHP中文网!!
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
php 怎么进行无限级查询,php如何实现无限级分类?相关推荐
- sql语句查询商品的一二三级分类都是一个字段怎么办_畅购商城(三):商品管理...
好好学习,天天向上 本文已收录至我的Github仓库「DayDayUP」:github.com/RobodLee/DayDayUP,欢迎Star 小练手 这里有三个小练手的任务,内容比较简单,就是对一 ...
- 无限级菜单 mysql设计_无限级菜单简单的设计
策略:数据库就一张表,前端查询出所有的可显示的菜单,在前端进行循环展示. 1,数据库表的设计 CREATE TABLEsys_menu ( idINT NOT NULLAUTO_INCREMENT, ...
- 无限级导航PHP,jQuery多级无限级导航下拉菜单代码
jQuery多级无限级导航下拉菜单代码 js代码 $(document).ready(function() { $("ul.nav li").hover(function(){ $ ...
- 2021重庆对口高职高考成绩查询,重庆市2021年高职分类考试成绩明日放榜
重庆市2021年高职分类考试成绩即将于明日(4月1日)放榜!3月31日,重庆市教育考试院公布了分数查询时间和方式. 2021年4月1日12:00起,考生可登录重庆市教育考试院门户网:www.cqksy ...
- sql查询语句_多字段分类汇总_多表合并
一.最初(最简单的入门实例,单个分类汇总) 1,查询语句/*药品费用分科室汇总*/ select c.sksxx02,sum(nvl(b.nfyxx06,0)) from yygli6 ...
- 如何查询电脑的文件系统的分类是哪一种?
系统分区磁盘–右键–属性! 盘符的格式可以在盘符上点右键看属性,上面有FAT或者NTFS.
- 导航无限级菜单 java,Element NavMenu 无限级菜单
数据结构 menudata.json {"data":[ { "id": 1, "path": "/home", &qu ...
- php如何对 mysql 中text类型拆分存入一个数组_PHP递归实现无限级分类,可选返回字符串和数组...
正 文: 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 递归,简单的说就是 ...
- PostgreSQL SQL 语言:并行查询
本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权. 1. 并行查询如何工作 当优化器判断对于某一个特定的查询,并行查询是最快的执行策略时,优化器将创建一个查询计划.该计划包括 ...
最新文章
- CodeForces - 1453D Checkpoints(概率+构造)
- git rollback代码都没了_git回滚线上代码
- 手机秒变IoT设备?——巧妙利用阿里云物联网平台
- 面试历程六:人真的有时候很奇怪
- 强悍的 vim —— 可视模式(visual mode)
- java Web应用配置log4j日志记录
- 面向过程和面向对象的区别,通俗易懂
- 存在哪些域名后缀种类?哪个后缀比较好?
- php第三方微信app支付接口开发,PHP开发APP微信支付接口
- java更新word目录_java aspose.words 生成word目录和更新目录
- css绘制星星闪烁,CSS3 闪烁的星星
- UltraVNC源码编译运行
- Word——删除最后一页空白页的方法
- 某网页在线视频有声音无图像
- 什么是适应?自适应?
- python asyncio_Python 异步 IO系列:认识asyncio
- 【微信抢红包】红包助手-修改版
- php h5微信支付和app微信支付区别,关于微信公众号支付 微信H5支付和微信APP支付的问题 (PHP)TP+VUE...
- linux 压缩根目录文件,Linux操作系统下如何压缩文件? zip压缩命令使用
- JSP 酒店管理系统 软件工程设计 网络编程 myeclipse 编辑 mysql数据库
热门文章
- Linux man命令的使用方法
- 解决asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze an
- 模仿jquery的fadeIn、fadeOut、fadeToogle、fadeTo函数,淡入淡出效果挺不错!
- postgresql判断字符串是否是数字
- EXCLE 使用MID函数实现快速填充年月日
- [信息论与编码]知识点总结
- vscode 添加 includePath
- 喜讯!热烈祝贺安科瑞DJSF1352-RN/D直流电能表取得UL证书
- 修改 Doxygen 主题,生成 Qt 风格的文档
- RFID托盘租赁管理系统解决方案-杭州东识科技