php 分类代码,php无限分类的图文代码介绍
无限分类,是指从一个最高分类开始,每个子分类都可以分出自己的若干个子分类,可以一直分下去,称为无限级分类;
比如一棵树,从一根树干开始,分出多个树枝,而这些树枝又分出其他的分支,理论上是可以无限分裂下去的;
再比如,一个家庭可以有若干个子女,我们把这些子女看做是第一级分类。而这些子女,又会各自组建自己的家庭,当他们有了自己的后代,就是第二级分类,如果每个家庭都有一个以上的子女,理论上是可以无限分裂的;
在php中,无限分类的表现形式如下图所示;
我们同过id和pid两个字段来连接父级分类和子集分类,这样就可以找到某一级分类的祖先和它的后代,例如顶级分类>华语歌手>流行歌手>流行男歌手>周杰伦;
光是做出数据还不够,我们还需要把数据展示出来,这个时候,我们就需要用到无限分类的递归算法了。
这里先解释一下什么是递归,递归是函数调用自身的一种编程技巧,通过调用自身达到循环的目的。那么问题来了,我们为什么不直接使用循环呢?如果直接使用循环的话,我们就没办法很好的解决参数的问题,特别是当处理一些复杂问题的时候,什么情况下初始化参数,什么情况下累加参数,都会需要额外的思考。不如递归的思路清晰。
看一个简单的递归例子;function test(&$b=0){
$b++; if($b<10){
test($b);
} return $b;
}echo test();
递归作为循环的一种变式,那么它也需要跳出循环的条件,或者是继续循环的条件。这里的&$b是参数传递的一种方式,指引用参数本身,通过&传递的参数,才会不断累积;
回到刚刚的分类:$host='127.0.0.1';
$db_user='root';
$db_pass='root';
$db_name='chenbk';
$timezone="Asia/Shanghai";
$link=mysqli_connect($host,$db_user,$db_pass,$db_name);
mysqli_query($link,"SET names UTF8");
header("Content-Type: text/html; charset=utf-8");
function tree($link,&$treeList=array(),$pid = 1,$count = 0) { //$link为数据库连接,&$treeList为输出数组,因为需要累积结果,所以加上引用
$count+=2; //count为识别分级深度的标识
$result = mysqli_query($link,"SELECT * FROM chen_category WHERE parentId={$pid}");
while ($row=mysqli_fetch_assoc($result)) {
$row['count'] = $count;
$row['name'] = str_repeat(' ', $count).'|-'.$row['name']; //通过分级深度的标识,来给分类缩进效果
$treeList[] = $row; //把查询到的结果存储起来
tree($link,$treeList,$row['id'],$count); //再次调用自身,这时的pid为上一条数据的id从而找到上一条数据的子分类;
}
return $treeList; //输出结果
}
$values=tree($link);
echo '';
foreach ($values as $key => $value) {
echo ''.$value['name'].'';
}
echo '';
这个函数的运行流程为:
1.通过pid=0找到最高分类
2.给它加上层级深度,通过层级深度加上缩进效果,然后把这条数据存起来。
3.再次调用自身,传入2.找出的数据,以及第一级分类的id作为下一级分类的pid;这样,我们每次找到它的子分类,最后就会找到它最小的一级分类;
最终出现的效果是这样的:
我这里把pid的默认值设为了1,所以最高分类没有显示出来;
至于这个算法的排序效果,在于wilhe循环里,调用函数自身的时候,我们第一次查出来的数据是2条,一条华语歌手,一条欧美歌手,但是,在运算的时候,函数是分层调用的,就像多层for循环一样,会等到最内层的循环结束之后,才会依次完成外部的循环。所以我们,在查到华语歌手的时候函数没结束,递归自身又找到了流行歌手,一直到,找到周杰伦之后,才开始处理它上一层的流行女歌手。根据这个流程出来的结果就完成了排序。
php 分类代码,php无限分类的图文代码介绍相关推荐
- php无限循环分类,php实现无限分类功能
应用场景 导航栏分类(如商品.课程.城市等)文件夹数据库设计 主要的三个字段:主键id.父级id.名称title. CREATE TABLE `t_cate` ( `id` int(11) unsig ...
- php无限分类下载,php无限分类
无限分类.php function wuji_del($id,$data=array()){ $temp=db('category')->where('pid='.$id)->select ...
- php递归处理数组,PHP递归实现无限分类数组处理
PHP递归实现无限分类数组处理 1,php递归算法实现无限分类 递归算法对无限分类的数组进行处理,分两种情况, 一种树状展示(数组包含子数组), 一种非树状展示(子类按照顺序排在父类的下面,不出现数组 ...
- PHP无限分类-PHP100代码篇
<?php //无限分类,从子类找所有父类 //$id 子类ID function php100_xd($id){ $sql="select * from fl where id=' ...
- PHP全路径无限分类导航LINK代码实现
<?php/*** @param php全路径无限分类*/include('db.inc.php'); function getPathCate($cateid){$sql = "se ...
- 关于一个无限分类的多选,单选相关的控件
最近在一个项目中需要用到无限分类的平铺多选,单选这些功能,查了一些资料,结果大都是一些用IFrame这样的东西做的,虽然用起来直观,但本人更喜欢集成控件形式的,于是抽了一些时间做了一个.思路是利用控件 ...
- php无限极下拉框,php递归实现无限分类生成下拉列表的函数
代码如下: /*------------------ */ //– 递归实现无限分类生成下拉列表函数 //– $tpl->assign('sort_list',createSortOptions ...
- php mysql 分类_php+mysql实现无限分类实例详解
本文实例讲述了php+mysql实现无限分类的方法.分享给大家供大家参考.具体分析如下: 1.数据库通过设置父类ID来进行唯一索引,然后使用函数的递归调用实现无限分类: 2.数据库设计通过特定格式进行 ...
- php mysql无限_php+mysql实现无限分类实例详解
php+mysql实现无限分类实例详解 fenlei($arr[$i][0]); //$arr[$i][1]表示第$i+1个分类的id的值.进行递归,也就是把自己的id作为f_id参数把自己的子类 ...
最新文章
- 2.1 mac下多版本jdk的安装和管理
- nginx反代理服务器
- mxnet基础到提高(13)--Activation激活函数
- 硬件工程师如何成为焊接界的高手
- C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能
- 用Jenkins自动化搭建测试环境_jenkins基础搭建_入门试炼02
- 处女座的训练(贪心)
- (转)RemapKey等:小巧实用的键盘映射工具
- 最坑人的辨色大比拼微信小游戏源码
- C语言实现链栈的创建、入栈、出栈、取栈顶、遍历......等基本操作(小白版详解)
- Ubuntu下载安装CUDA
- 通达OA应对后门检测的临时方法
- 如何免费获取基于公网 IP 的 SSL 证书 (无需域名)
- 函数式编程-Either函子篇
- TNS-12555报错的解决方案
- Work20230406
- Android设置来电号码归属地
- 原创 关于中国象棋的
- 先验概率、后验概率、条件概率的形象解释
- 在校大学生如何利用编程赚钱?
热门文章
- qt 怎么设计个性化的滑块_滑块上走滑块模具结构设计,不一样的结构思维成就你的高薪职业...
- Unity Optimizing Shader Load Time
- Unreal、CryEngine、Gamebryo引擎介绍
- Predicate函数式接口
- rocketmq 4.X 扩容思路
- 云计算迈向100%的虚拟化
- unity3D游戏开发实战原创视频讲座系列7之消消乐游戏开发
- [Angularjs]angular ng-repeat与js特效加载先后导致的问题
- xen虚拟化实战系列(二)之xen虚拟机安装
- Windows Server 2008搭建域环境---安装活动目录