普通的方法(采用for和foreach)

		//显示
foreach($data as $k=>$v){
//str_repeat()函数用于把字符串重复指定的次数
$data[$k]['title']=str_repeat('---',$v['type']-1).$v['title'];
}

无限级分类的设计思路:

为了能够使得栏目的管理更加动态化,在这里可以设置添加栏目,添加的数据库中设计一个名为pid的字段,便于新添加的栏目可以找到他的父栏目。如果是顶级的栏目,则pid为0。再提取数据显示的时候,后台数据库中设置有type字段,用于标识该栏目的等级,在数据显示的时候用str_repeat()函数在前面加上‘-----’,来区分他们的等级。

这个时候的排序显得非常的重要,并且此方法没办法很好的把父级和子级联系在一起,不建议使用

排序

添加的时候为了更加方便的直观的显示哪个栏目下有什么子栏目,可以选择在里面设置一个sorts排序字段,用于排序。在前端,为了能够方便排序。需要表单提交全部的排序的内容。前端的话只需要在表单input的name属性里加入一个数组名

<input type="hidden" name="id[]" value="{$arr.id}"/>
<input type="text" value="{$arr.sorts}" style="width: 40px;height: 40px;text-align: center" name="sorts[]"/>

然后后台进行接受,同样用for和foreach进行循环操作和遍历

		//把新的获得的排序的信息储存到数据库中
$arr=$_POST;
for($i=0;$i<count($arr['id']);$i++){
$sort=$model->find($arr['id'][$i]);
$sort['sorts']=$arr['sorts'][$i];
$model->save($sort);
}
//然后根据新的排序信息进行排序
$data=$model->order('sorts')->select();
foreach($data as $k=>$v){
$data[$k]['title']=str_repeat('---',$v['type']-1).$v['title'];
}

用递归的方法实现无限级分类


public function getCate($field='*'){
//用field查询固定字段的数据,若是没有输入实参,则默认查询全部
//获取到数据库中相关栏目的数据
$data=$this->field($field)->order('sorts asc')->select();
//调用递归函数
return $this->getTree($data);
} //根据父级栏目的id去查询子栏目的信息
//递归函数,传入全部的栏目信息,用pid来标识栏目所对应的父级的栏目id,level来表示栏目的等级
public function getTree($data,$pid=0,$level=0){
//此处应该定义static 如果没有用static,则无法输出全部的栏目信息
static $tree=array();
foreach($data as $key=>$v){
if($v['pid']==$pid){
$v['level']=$level;
//str_repeat()函数用于把字符串重复指定的次数,用于区别栏目的等级
$v['title']=str_repeat('----',$level).$v['title'];
$tree[]=$v;
$this->getTree($data,$v['id'],$level+1);
}
}
}

在用递归函数进行无限级分类的时候建议写在model函数里,这样在控制器中只需要调用模型中的方法即可。再模型中要想调用数据库的查询操作,不用加表明,只需要在模型中使用$this即可。

thinkphp实现无限级分类的更多相关文章

  1. ThinkPHP无限级分类

    <?php // +---------------------------------------------------------------------- // | ThinkPHP [ ...

  2. ThinkPHP自动填充实现无限级分类的方法

    这篇文章主要介绍了ThinkPHP自动填充实现无限级分类的方法,是ThinkPHP项目开发中非常实用的一个技巧,需要的朋友可以参考下   本文实例展示了ThinkPHP自动填充实现无限级分类的方法,是 ...

  3. thinkphp中如何实现无限级分类?

    thinkphp中如何实现无限级分类? 一.总结 1.数据表设计+递归算法 二.php实现无限级分类实例总结 1.数据库数据如下: 2.任务需求:给一个id,求自己和所有父亲. 3.实现代码如下:th ...

  4. thinkphp框架中使用递归实现无限级分类

    无限级分类在我们开发中显得举足轻重,会经常被人问到,而一般会用递归的方法来实现,但是递归又会难倒一批人.今天博主分享的这个稍微有点基础的phper都能学会,希望大家能喜欢. 一.先建立对应的数据库和表 ...

  5. CMSPRESS-PHP无限级分类2

    原文章地址:http://www.thinkphp.cn/code/170.html 超级无限分类 使用简单 效率极高 核心代码10行不到 另外 求这个分类的不足,和更高效简单的无限分类方法 ^_^ ...

  6. php无限级分类实战——评论及回复功能

    经常在各大论坛或新闻板块详情页面下边看到评论功能,当然不单单是直接发表评论内容那么简单,可以对别人的评论进行回复,别人又可以对你的回复再次评论或回复,如此反复,理论上可以说是没有休止,从技术角度分析很 ...

  7. PHP无限级分类的实现(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...

  8. 一道无限级分类题的 PHP 实现

    今天有网友出了道题: 给出如下的父子结构(你可以用你所用语言的类似结构来描述,第一列是父,第二列是子),将其梳理成类似如图的层次父子结构. origin = [('A112', 'A1122'), ( ...

  9. (实用篇)PHP递归实现无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...

随机推荐

  1. 关于java中使用数组的几点理解笔记

    1.数组元素就是变量: 2.在已有数据类型之后加方括号[],就会产生一个新的数组类型: 分两类:1)基本数据类型,如:int[],string[]; 2)引用数据类型,如:Person[](类): 3 ...

  2. WCF学习——构建一个简单的WCF应用(二)

    我们接着上一篇文章进行讲解 http://www.cnblogs.com/songjianhui/p/7060698.html 一:客户端通过添加引用调用服务 WCF应用服务被成功寄宿后,WCF服务应 ...

  3. 数据处理包dplyr的函数

    dplyr专注处理dataframe对象, 并提供更稳健的与其它数据库对象间的接口. 一.5个关键的数据处理函数: select()   返回列的子集filter()     返回行的子集arrang ...

  4. Haoop MapReduce 的Partition和reduce端的二次排序

    先贴一张原理图(摘自hadoop权威指南第三版) 实际中看了半天还是不太理解其中的Partition,和reduce端的二次排序,最终根据实验来结果来验证自己的理解 1eg 数据如下 20140101 ...

  5. 基于spring多数据源动态调用及其事务处理

    需求: 有些时候,我们需要连接多个数据库,但是,在方法调用前并不知道到底是调用哪个.即同时保持多个数据库的连接,在方法中根据传入的参数来确定. 下图的单数据源的调用和多数据源动态调用的流程,可以看出在 ...

  6. Entity Framework入门教程:什么是Entity Framework

    Entity Framework简介 Entity Framework是微软提供的一个O/RM(对象关系映射)框架.它基于ADO.NET,为开发人员提供了一种自动化的机制来访问和存储数据库中的数据. ...

  7. Tomcat中部署web应用 ---- Dubbo服务消费者Web应用war包的部署

    样例视频:http://www.roncoo.com/course/view/f614343765bc4aac8597c6d8b38f06fd IP: 192.168.2.61 部署容器:apache ...

  8. java中的选择排序之降序排列

    import java.util.Arrays;//必须加载 class Demo{ public static void main(String []args){ int[] arr={3,54,4 ...

  9. 错误Fatal error: Call to undefined function mb_strlen()的解决办法

    其实这个就是没有开启php_mbstring模块.Windows下只需要修改安装目录下的php.ini文件把extension=php_mbstring.dll前面的“#”号注释符去掉保存后重启Apa ...

  10. thinkphp带查询条件的分页

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...