php无限极分类实例,php递归无限极分类实例
无限级分类原理简介
无限分类看似"高大上",实际上原理是非常简单的 。无限分类不仅仅需要代码的巧妙性,也要依托数据库设计的合理性。要满足无限级分类,数据库需要有两个必须的字段,id,pid。id用来标识自身,而 pid则是用来表明父级id。也就是说,每个分类记录不仅描述了自身,还描述了与其关心最为紧密的另一个id。看似复杂的事情被这样一个小技巧解决了。
闲话不多说,该展现本文的实例了。
作为一个狂热海贼迷,这篇的实例我就以《海贼王》人物组织做案例。
数据库准备:
建表onepiece:
create tableonepiece(
id intauto_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)分类。
classUnlimited{
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 functiondisplayList(){
$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;
}
}
原文:http://www.cnblogs.com/xlz307/p/4723777.html
php无限极分类实例,php递归无限极分类实例相关推荐
- php 递归实现无限极分类和排序_无限极分类的两种方式,递归和引用
说到无限极分类,比较常见的做法是在建表的时候,增加一个parnet_id字段用来区别自己所属的分类(是顶级分类还是子分类) 由于展示数据的时候,需要表达出这种所属关系,所以必然要在读取数据的时候进行一 ...
- php 递归无限极分类和层级展示(适用于权限管理和分类管理功能)
php 递归无限极分类和层级展示(适用于权限管理和分类管理功能) 第一:权限管理层级展示 /*** 数组的合并,并加上html标识前缀* @param array $data* @param int ...
- php 递归实现无限极分类和排序_php 无限极分类以及使用递归实现的排序方法
至于添加删除之类的功能我就不多写了!仔细看看就知道这么用了. 难的是显示方面 希望高手扩展一下! 这是类 代码如下:<?php /*=============================== ...
- php mysql 分类_php+mysql实现无限分类实例详解
本文实例讲述了php+mysql实现无限分类的方法.分享给大家供大家参考.具体分析如下: 1.数据库通过设置父类ID来进行唯一索引,然后使用函数的递归调用实现无限分类: 2.数据库设计通过特定格式进行 ...
- 无限极分类不知pid_PHP实现无限极分类
导读:说到无限极分类,这个在程序中是常见的一个功能点了.实现的方式也有很多种,今天着重分享一下涉及到数据库的无线分类,可以使用递归处理,也可以使用循环查询数据库处理.但是我们考虑到数据库的性能问题,都 ...
- php无限分类原理,php 递归无限级分类原理和实现代码
递归无限级分类的原理: 每一个分类都记录它的父级id,当为顶级分类时,父级id为0.这样无论哪个分类,都可以通过父级id一层一层去查明它的所有父级,以便清楚知道它所属何种分类,层级深度为几. 对数据进 ...
- 无限极分类php简单,创建无限极分类树型结构的简单方法
先上效果图 顶级分类其实就是一级分类,二级分类也叫作一级分类的子分类,在这个基础上,子分类还可以拥有子分类,这样就构成了无限极分类. 接下来看具体实现的代码: 一.在控制器中按字段查询,查询出所有分类 ...
- php递归分组,PHP递归实现无限级分类
本篇文章的内容是PHP递归实现无限级分类,现在分享给大家,有需要的朋友也可以参考一下,大家一起过来看看吧$datasection = array( array('id' => 1, 'name' ...
- php如何对 mysql 中text类型拆分存入一个数组_PHP递归实现无限级分类,可选返回字符串和数组...
正 文: 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 递归,简单的说就是 ...
最新文章
- python 正则 去除字符串中异常字符
- 机器学习 深度学习 ai_人工智能,机器学习,深度学习-特征和差异
- 【转】RAX,eax,ax,ah,al 关系
- [转]Oracle_ProC编程
- 云计算之openstack(N版)neutron网络服务最佳实践
- 20175208 《Java程序设计》第七周学习总结
- 某人分析的70后,80后,90后
- 数学建模算法python源码_如何使用python完成数学建模常见算法
- 为什么密度泛函理论 (DFT) 会低估带隙?
- 2018年我国人均国民总收入达到9732美元,国民经济持续快速增长
- JZYZOJ1384 种花小游戏 状压dp
- 百度SiteApp网站打不开,手机站可以这样搞掂
- 山东省计算机软件比赛,山东省大学生软件设计大赛报名通知
- 猫眼电影票房爬取到MySQL中_Scrapy爬取猫眼电影并存入MongoDB数据库
- python文件批量改名
- 枚举类中获取枚举值的几种方法
- 利用计算机审计新闻,计算机审计显身手 审计员钻出账本堆被审单位麻烦减少...
- openstack 云计算平台 mitaka 搭建
- 漫画 | 打死我也不学编译了!
- Contiki介绍及参考资料