首页 > php教程 > php手册 > 正文

php实现无限级分类(递归方法)

php中文网
发布: 2016-06-06 19:48:40
原创
1584人浏览过

当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究。

相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径。各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了。

到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱,代码很多,让我们怎么学习嘛,那些都不靠谱,还是自己捣鼓捣鼓无限极分类了。

  什么是无限级分类?

  无限级分类是一种分类技巧,例如部门组织,文章分类,学科分类等常用到无限级分类,将其简单理解成分类就好了。其实我们仔细想一下,生活中的分类简直太多了,衣服可以分为男装和女装,也可以分为上衣和裤子,也可以根据年龄段分类。分类无处不在,分类显得“无限”。我这里就不说无限分类的必要性了。

  无限级分类原理简介

立即学习PHP免费学习笔记(深入)”;

  无限分类看似"高大上",实际上原理是非常简单的 。无限分类不仅仅需要代码的巧妙性,,也要依托数据库设计的合理性。要满足无限级分类,数据库需要有两个必须的字段,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,'克洛克达尔');

  这里还是科普下海贼王里面的设定:世界分为三大阵营:海军,海贼,革命军。海军有大将:青雉,赤犬,黄猿。海贼有:四皇,七武海,草帽海贼团。四皇有香克斯,七武海有多弗朗明哥,克洛克达尔,草帽海贼团有索隆。(打个广告:海贼王真的很好看)。

BJXSHOP网上开店专家
BJXSHOP网上开店专家

BJXShop网上购物系统是一个高效、稳定、安全的电子商店销售平台,经过近三年市场的考验,在中国网购系统中属领先水平;完善的订单管理、销售统计系统;网站模版可DIY、亦可导入导出;会员、商品种类和价格均实现无限等级;管理员权限可细分;整合了多种在线支付接口;强有力搜索引擎支持... 程序更新:此版本是伴江行官方商业版程序,已经终止销售,现于免费给大家使用。比其以前的免费版功能增加了:1,整合了论坛

BJXSHOP网上开店专家 0
查看详情 BJXSHOP网上开店专家

  最终目的:

  我们今天制作的是两种形式的无限级分类形式,一种是下拉列表式,一种则是导航Link式的。直接上效果图了:

php实现无限级分类(递归方法)


下拉列表式


导航Link式

  实例代码:

  我封装了一个Unlimited类,用来调用diaplayList()展现下拉列表形式,调用diaplayLink展现导航Link分类。也可以增加(addNodes())和删除(deleteNodes)分类。

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=""; 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; } }

  类中函数主要采取了递归函数的方法,如果理解深刻理解递归函数,其余的部分也就水到渠成了。我会在后面的部分详细介绍实现递归函数的三种方法。

 我们再来看一个实例:

首先建立分类信息表:

CREATE TABLE IF NOT EXISTS `category` ( `categoryId` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `parentId` smallint(5) unsigned NOT NULL DEFAULT '0', `categoryName` varchar(50) NOT NULL, PRIMARY KEY (`categoryId`) ) ;

插入若干数据:

INSERT INTO `category` (`categoryId`, `parentId`, `categoryName`) VALUES (1, 0, 'php'), (2, 0, 'java'), (3, 0, 'c/c++'), (4, 1, 'php基础'), (5, 1, 'php开源资料'), (6, 1, 'php框架'), (7, 2, 'java Se'), (8, 2, 'java EE'), (9, 2, 'java Me'), (10, 3, 'c/c++基础编程'), (11, 3, 'c/c++系统开发'), (12, 3, 'c嵌入式编程'), (13, 3, 'c++应用开发'), (14, 13, 'c++桌面应用开发'), (15, 13, 'c++游戏开发');

下面是php代码:

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号