这篇文章将为大家详细讲解有关PHP如何实现无限分类,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
递归(程序调用自身的编程技巧):
1、$_GLOBALS[result]
2、static $result
3、参数引用&
举例:遍历1-10
```
$i=0;
function deeploop( $i ){
global $i;
$i++;
echo $i;
if( $i<10 ){
deeploop($i);
}
}
function deeploop( ){
static $i=0;
$i++;
echo $i;
if( $i<10 ){
deeploop($i);
}
}
function deeploop( &$i=0 ){
$i++;
echo $i;
if( $i<10 ){
deeploop($i);
}
}
```
一、无限分类实现:
1、表设计设置父id 顶级父id设为0 建立族谱树;每一个分类都需记录它的父级id。( pid=0 代表顶级 )
id pid catename cateorder createtime ( 主键id,父id,分类name,分类排序,创建时间)
举例:网站的分类目录结构;餐饮的分类结构;评论的结构
2、全路径无限分类(以一个字段将所有父级id按顺序记录下来)
id path catename cateorder createtime ( 主键id,逗号分隔的顺序排列父id,分类name,分类排序,创建时间)
优缺点:
全路径查询方便;增加,移动分类时数据维护稍显复杂;
二、举例实现(网站目录):
分类表:
```
#父级Id递归法
CREATE TABLE `deepcate`(
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`pid` int(11) NOT NULL DEFAULT 0,
`catename` char(25) NOT NULL,
`cateorder` int(6) ,
`createtime` date
)ENGINE=INNODB default CHARSET=utf8;
//数据
INSERT INTO `deepcate` VALUES(1,0,'图片',null,'2016-11-01'),
( 2,1,'美女',null,'2016-11-01'),
( 3,1,'新闻',null,'2016-11-01'),
( 4,2,'足球宝贝',null,'2016-11-01'),
( 5,2,'日韩明星',null,'2016-11-01'),
( 6,5,'美女写真',null,'2016-11-01');
#全路径
CREATE TABLE `qljcate` (
`id` int(11) NOT NULL,
`path` char(255) ,
`catename` char(25) NOT NULL,
`cateorder` int(6),
`createtime` date
)ENGINE=INNODB default CHARSET=utf8;
INSERT INTO `qljcate` VALUES( 1,null,'图片',null,'2016-11-01'),
( 2,1,'美女图片',null,'2016-11-01'),
( 3,1,2,'足球宝贝',null,'2016-11-01'),
( 4,1,2,'日韩明星',null,'2016-11-01'),
( 5,1,2,4,'美女写真',null,'2016-11-01');
```
获取图片所在的目录路径:
```
#父级Id递归法
CREATE TABLE `deepcate`(
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`pid` int(11) NOT NULL DEFAULT 0,
`catename` char(25) NOT NULL,
`cateorder` int(6) ,
`createtime` date
)ENGINE=INNODB default CHARSET=utf8;
//数据
INSERT INTO `deepcate` VALUES(1,0,'图片',null,'2016-11-01'),
( 2,1,'美女',null,'2016-11-01'),
( 3,1,'新闻',null,'2016-11-01'),
( 4,2,'足球宝贝',null,'2016-11-01'),
( 5,2,'日韩明星',null,'2016-11-01'),
( 6,5,'美女写真',null,'2016-11-01');
#全路径
CREATE TABLE `qljcate` (
`id` int(11) NOT NULL,
`path` char(255) ,
`catename` char(25) NOT NULL,
`cateorder` int(6),
`createtime` date
)ENGINE=INNODB default CHARSET=utf8;
INSERT INTO `qljcate` VALUES( 1,null,'图片',null,'2016-11-01'),
( 2,1,'美女图片',null,'2016-11-01'),
( 3,1,2,'足球宝贝',null,'2016-11-01'),
( 4,1,2,'日韩明星',null,'2016-11-01'),
( 5,1,2,4,'美女写真',null,'2016-11-01');
```
*注意点:
移动分类不能移到自己及其子类下面;删除分类 (只能删除最底层的分类,及不含子类的分类;换言之,只能从最底层删起).
思考图片类型下所有的图片分类?
```
#pid 父级id实现法
function GetAllcate( $id,&$result=array() ){
$sql = "SELECT * FROM deepcate WHERE pid in ({$id})";
$query = mysql_query( $sql );
$row = mysql_fetch_assoc( $query );
if( mysql_num_rows($row)>0 )
{
$idlist = array();
while( $row ){
$result[] = $row;
$idlist[] = $row['id'];
}
$id = implode(',',$idlist);
GetAllcate( $id,$result );
}
$result = array_unique( $result );
return $result;
}
```
此类方法比较适用于查询所在父分类下所有的书籍、文章。。。当然,全路径可以直接获取,就不再此提出了。
实际操作中,我们可以根据实际情况设计合理的表结构。
举个实例,连锁门店实现商品的管理,门店的账户设置就会存在上下级关系,根据代理点的分区可能存在这种下级拥有自己下级,那么采用这种无限分类的方法就比较灵活面对这种关系体系,只需设定每个账户等级,就能对不同的门店设定权限分配。
关于“PHP如何实现无限分类”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。