无限分类,是指从一个最高分类开始,每个子分类都可以分出自己的若干个子分类,可以一直分下去,称为无限级分类;

比如一棵树,从一根树干开始,分出多个树枝,而这些树枝又分出其他的分支,理论上是可以无限分裂下去的;

再比如,一个家庭可以有若干个子女,我们把这些子女看做是第一级分类。而这些子女,又会各自组建自己的家庭,当他们有了自己的后代,就是第二级分类,如果每个家庭都有一个以上的子女,理论上是可以无限分裂的;

在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无限分类的图文代码介绍相关推荐

  1. php无限循环分类,php实现无限分类功能

    应用场景 导航栏分类(如商品.课程.城市等)文件夹数据库设计 主要的三个字段:主键id.父级id.名称title. CREATE TABLE `t_cate` ( `id` int(11) unsig ...

  2. php无限分类下载,php无限分类

    无限分类.php function wuji_del($id,$data=array()){ $temp=db('category')->where('pid='.$id)->select ...

  3. php递归处理数组,PHP递归实现无限分类数组处理

    PHP递归实现无限分类数组处理 1,php递归算法实现无限分类 递归算法对无限分类的数组进行处理,分两种情况, 一种树状展示(数组包含子数组), 一种非树状展示(子类按照顺序排在父类的下面,不出现数组 ...

  4. PHP无限分类-PHP100代码篇

    <?php  //无限分类,从子类找所有父类 //$id 子类ID function php100_xd($id){ $sql="select * from fl where id=' ...

  5. PHP全路径无限分类导航LINK代码实现

    <?php/*** @param php全路径无限分类*/include('db.inc.php'); function getPathCate($cateid){$sql = "se ...

  6. 关于一个无限分类的多选,单选相关的控件

    最近在一个项目中需要用到无限分类的平铺多选,单选这些功能,查了一些资料,结果大都是一些用IFrame这样的东西做的,虽然用起来直观,但本人更喜欢集成控件形式的,于是抽了一些时间做了一个.思路是利用控件 ...

  7. php无限极下拉框,php递归实现无限分类生成下拉列表的函数

    代码如下: /*------------------ */ //– 递归实现无限分类生成下拉列表函数 //– $tpl->assign('sort_list',createSortOptions ...

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

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

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

    php+mysql实现无限分类实例详解 fenlei($arr[$i][0]);   //$arr[$i][1]表示第$i+1个分类的id的值.进行递归,也就是把自己的id作为f_id参数把自己的子类 ...

最新文章

  1. 2.1 mac下多版本jdk的安装和管理
  2. nginx反代理服务器
  3. mxnet基础到提高(13)--Activation激活函数
  4. 硬件工程师如何成为焊接界的高手
  5. C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能
  6. 用Jenkins自动化搭建测试环境_jenkins基础搭建_入门试炼02
  7. 处女座的训练(贪心)
  8. (转)RemapKey等:小巧实用的键盘映射工具
  9. 最坑人的辨色大比拼微信小游戏源码
  10. C语言实现链栈的创建、入栈、出栈、取栈顶、遍历......等基本操作(小白版详解)
  11. Ubuntu下载安装CUDA
  12. 通达OA应对后门检测的临时方法
  13. 如何免费获取基于公网 IP 的 SSL 证书 (无需域名)
  14. 函数式编程-Either函子篇
  15. TNS-12555报错的解决方案
  16. Work20230406
  17. Android设置来电号码归属地
  18. 原创 关于中国象棋的
  19. 先验概率、后验概率、条件概率的形象解释
  20. 在校大学生如何利用编程赚钱?

热门文章

  1. qt 怎么设计个性化的滑块_滑块上走滑块模具结构设计,不一样的结构思维成就你的高薪职业...
  2. Unity Optimizing Shader Load Time
  3. Unreal、CryEngine、Gamebryo引擎介绍
  4. Predicate函数式接口
  5. rocketmq 4.X 扩容思路
  6. 云计算迈向100%的虚拟化
  7. unity3D游戏开发实战原创视频讲座系列7之消消乐游戏开发
  8. [Angularjs]angular ng-repeat与js特效加载先后导致的问题
  9. xen虚拟化实战系列(二)之xen虚拟机安装
  10. Windows Server 2008搭建域环境---安装活动目录