无限级分类原理简介

无限分类看似"高大上",实际上原理是非常简单的 。无限分类不仅仅需要代码的巧妙性,也要依托数据库设计的合理性。要满足无限级分类,数据库需要有两个必须的字段,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(‘ &nbsp‘,$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递归无限极分类实例相关推荐

  1. php 递归实现无限极分类和排序_无限极分类的两种方式,递归和引用

    说到无限极分类,比较常见的做法是在建表的时候,增加一个parnet_id字段用来区别自己所属的分类(是顶级分类还是子分类) 由于展示数据的时候,需要表达出这种所属关系,所以必然要在读取数据的时候进行一 ...

  2. php 递归无限极分类和层级展示(适用于权限管理和分类管理功能)

    php 递归无限极分类和层级展示(适用于权限管理和分类管理功能) 第一:权限管理层级展示 /*** 数组的合并,并加上html标识前缀* @param array $data* @param int ...

  3. php 递归实现无限极分类和排序_php 无限极分类以及使用递归实现的排序方法

    至于添加删除之类的功能我就不多写了!仔细看看就知道这么用了. 难的是显示方面 希望高手扩展一下! 这是类 代码如下:<?php /*=============================== ...

  4. php mysql 分类_php+mysql实现无限分类实例详解

    本文实例讲述了php+mysql实现无限分类的方法.分享给大家供大家参考.具体分析如下: 1.数据库通过设置父类ID来进行唯一索引,然后使用函数的递归调用实现无限分类: 2.数据库设计通过特定格式进行 ...

  5. 无限极分类不知pid_PHP实现无限极分类

    导读:说到无限极分类,这个在程序中是常见的一个功能点了.实现的方式也有很多种,今天着重分享一下涉及到数据库的无线分类,可以使用递归处理,也可以使用循环查询数据库处理.但是我们考虑到数据库的性能问题,都 ...

  6. php无限分类原理,php 递归无限级分类原理和实现代码

    递归无限级分类的原理: 每一个分类都记录它的父级id,当为顶级分类时,父级id为0.这样无论哪个分类,都可以通过父级id一层一层去查明它的所有父级,以便清楚知道它所属何种分类,层级深度为几. 对数据进 ...

  7. 无限极分类php简单,创建无限极分类树型结构的简单方法

    先上效果图 顶级分类其实就是一级分类,二级分类也叫作一级分类的子分类,在这个基础上,子分类还可以拥有子分类,这样就构成了无限极分类. 接下来看具体实现的代码: 一.在控制器中按字段查询,查询出所有分类 ...

  8. php递归分组,PHP递归实现无限级分类

    本篇文章的内容是PHP递归实现无限级分类,现在分享给大家,有需要的朋友也可以参考一下,大家一起过来看看吧$datasection = array( array('id' => 1, 'name' ...

  9. php如何对 mysql 中text类型拆分存入一个数组_PHP递归实现无限级分类,可选返回字符串和数组...

    正 文: 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 递归,简单的说就是 ...

最新文章

  1. python 正则 去除字符串中异常字符
  2. 机器学习 深度学习 ai_人工智能,机器学习,深度学习-特征和差异
  3. 【转】RAX,eax,ax,ah,al 关系
  4. [转]Oracle_ProC编程
  5. 云计算之openstack(N版)neutron网络服务最佳实践
  6. 20175208 《Java程序设计》第七周学习总结
  7. 某人分析的70后,80后,90后
  8. 数学建模算法python源码_如何使用python完成数学建模常见算法
  9. 为什么密度泛函理论 (DFT) 会低估带隙?
  10. 2018年我国人均国民总收入达到9732美元,国民经济持续快速增长
  11. JZYZOJ1384 种花小游戏 状压dp
  12. 百度SiteApp网站打不开,手机站可以这样搞掂
  13. 山东省计算机软件比赛,山东省大学生软件设计大赛报名通知
  14. 猫眼电影票房爬取到MySQL中_Scrapy爬取猫眼电影并存入MongoDB数据库
  15. python文件批量改名
  16. 枚举类中获取枚举值的几种方法
  17. 利用计算机审计新闻,计算机审计显身手 审计员钻出账本堆被审单位麻烦减少...
  18. openstack 云计算平台 mitaka 搭建
  19. 漫画 | 打死我也不学编译了!
  20. Contiki介绍及参考资料

热门文章

  1. Fetch API 简单指南
  2. 本地安全策略账户锁定阈值设置
  3. mysql least用法_mysql least函数
  4. C# MDI窗体的设置
  5. codeforces #309 D D. Nudist Beach(浮点数二分+bfs)
  6. 项目管理用飞项,4步让你不再为项目管理而烦恼
  7. JVM探究:全面解析OOM异常,都在这了,看完再也不怕遇到了
  8. Android怎样控制评价小星星的显示(能获取到星星的个数)
  9. 读书百客:《落叶》赏析
  10. 通信、网络、计算融合的天地一体化信息网络体系架构研究