什么是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,'克洛克达尔');
这里还是科普下海贼王里面的设定:世界分为三大阵营:海军,海贼,革命军。海军有大将:青雉,赤犬,黄猿。海贼有:四皇,七武海,草帽海贼团。四皇有香克斯,七武海有多弗朗明哥,克洛克达尔,草帽海贼团有索隆。(打个广告:海贼王真的很好看)。
最终目的:
我们今天制作的是两种形式的无限级分类形式,一种是下拉列表式,一种则是导航Link式的。直接上效果图了:
下拉列表式
导航Link式
实例代码:
我封装了一个Unlimited类,用来调用diaplayList()展现下拉列表形式,调用diaplayLink展现导航Link分类。也可以增加(addNodes())和删除(deleteNodes)分类。
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利用递归实现无限分类,格式化数组的简单示例
这篇文章主要为大家详细介绍了PHP利用递归实现无限分类,格式化数组的简单示例,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧!我们要做一个商品的无限分类 ...
- Caffe实践】如何利用Caffe训练ImageNet分类网络
Caffe实践]如何利用Caffe训练ImageNet分类网络 源文章:https://github.com/BVLC/caffe/tree/master/examples/imagenet 由于要使 ...
- ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测daiding
ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测 目录 基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测 设计思路 ...
- ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测
ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测 目录 基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测 设计思路 ...
- EL之GB(GBC):利用GB对多分类问题进行建模(分层抽样+调1参)并评估
EL之GB(GBC):利用GB对多分类问题进行建模(分层抽样+调1参)并评估 目录 输出结果 设计思路 核心代码 输出结果 T1. T2. 设计思路 核心代码 #T1. nEst = 500 dept ...
- EL之GB(GBC):利用GB对二分类问题进行建模并评估
EL之GB(GBC):利用GB对二分类问题进行建模并评估 目录 输出结果 T1.纯GB算法 T2.以RF为基学习器的GB算法 设计思路 核心代码 输出结果 T1.纯GB算法 T2.以RF为基学习器的G ...
- Keras之DNN::基于Keras(sigmoid+binary_crossentropy+predict_classes)利用DNN实现二分类——DIY二分类数据集预测新数据点
Keras之DNN::基于Keras(sigmoid+binary_crossentropy+predict_classes)利用DNN实现二分类--DIY二分类数据集&预测新数据点 目录 输 ...
- php如何对 mysql 中text类型拆分存入一个数组_PHP递归实现无限级分类,可选返回字符串和数组...
正 文: 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 递归,简单的说就是 ...
- 利用SVM 实现文本分类的实例
原文来自:http://blog.csdn.net/zhzhl202/article/details/8197109 之前做过一些文本挖掘的项目,比如网页分类.微博情感分析.用户评论挖掘,也曾经将li ...
最新文章
- docker update_DevOps核心:使用Docker部署Jenkins持续集成服务器
- [15] 星星(Star)图形的生成算法
- 1154:LETTERS
- 020 Android之so文件动态调试
- 从零开始入门 K8s | GPU 管理和 Device Plugin 工作机制
- PHP全栈学习笔记10
- Servlet JSP系列文章总结
- 两个小程序大概的了解一下java的线程
- 社交媒体爬虫------调用微博API获取微博内容
- MMKV_MMKV - 由微信开发的高效,小巧的移动端key-value存储框架,适用于iOS和Android...
- php swfobject,SWFObject基本用法实例分析_javascript技巧
- 对称密钥密码体制的主要特点
- 动态更换 Shape 的颜色
- ShaRF: Shape-conditioned Radiance Fields from a Single View
- Raspberry3B+搭建有线路由器-实现网口转发
- 《算法图解》学习笔记(九):动态规划(附代码)
- 计算机如何操作补考,关于计算机Excel补考试题
- SyntaxError: Non-UTF-8 code starting with ‘\xe6‘ in file C:/Users/0moyi0/Desktop/DeepLearningExample
- PCI Express学习篇---Power Management(二)
- 特征锦囊:怎么找出数据集中有数据倾斜的特征?