创建无限极分类树型结构的简单方法


Posted in PHP onJune 20, 2017

先上效果图

创建无限极分类树型结构的简单方法

顶级分类其实就是一级分类,二级分类也叫作一级分类的子分类,在这个基础上,子分类还可以拥有子分类,这样就构成了无限极分类。

接下来看具体实现的代码:

一、在控制器中按字段查询,查询出所有分类信息(id:该分类的ID值,cate_name:该分类的名称,pid:父ID,sorts:为显示标题顺序排序做准备,可不写。)

public function cate_display()
  {
    $cate = D('Cate'); 
    $field = array('id','cate_name','pid','sorts');
    $list = $cate->allCategory($field);
    $this->assign('list',$list);
    $this->display();
  }

二、模型中的代码

在对应控制器的模型中创建两个方法

1.查询所有分类信息,并调用生成分类树方法:

public function allCategory($field='*'){
     $data = $this->field($field)->select();
     return $this->tree($data);
   }

2.生成分类树(使用递归,传进去数据,以及pid[父类id],level[层数,用来控制显示的-数量]两个变量,初始值为零)

public function tree($data,$pid=0,$level=0){
    static $tree = array();
    foreach($data as $k=>$v){
      if($v['pid'] == $pid){
        $v['level'] = $level;
        $tree[]=$v;
        $this->tree($data,$v['id'],$level+1);
      }
    }
  
    return $tree;
  }

三、视图文件中的代码

<div class="form-group">
        <label for="pid" class="col-sm-2 control-label no-padding-right">上级菜单</label>
        <div class="col-sm-6">
          <select name="pid" style="width: 100%;">
            <option selected="selected" value="0">顶级菜单</option>
            <volist name="row" id="val"> 
              <option value="{$val.id}"><?php echo str_repeat('-',$val['level']*4); ?>{$val.cate_name}
              </option> 
            </volist> 
          </select>
        </div>
      </div>

这样,一个可以无限递归的分类树形结构就完成了,总结:核心思想还是模型中的递归函数,先传进去pid默认为零,以后每次递归传入的pid就是上级的id,level用来记录递归层数,最后在视图页面显示时,调用PHP内置函数str_repeat(),用来重复输出'-‘以达到输出时区分级数的效果。

以上这篇创建无限极分类树型结构的简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP开发中四种查询返回结果分析
Jan 02 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
php Calender(日历)代码分享
Jan 03 PHP
YII中assets的使用示例
Jul 31 PHP
PHP中调用SVN命令更新网站方法
Jan 07 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
Oct 21 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
解决Laravel5.5下的toArray问题
Oct 15 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 PHP
PHP实现的简单排列组合算法应用示例
Jun 20 #PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 #PHP
PHP中模糊查询并关联三个select框
Jun 19 #PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 #PHP
Laravel给生产环境添加监听事件(SQL日志监听)
Jun 19 #PHP
Yii 2.0自带的验证码使用经验分享
Jun 19 #PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 #PHP
You might like
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
javascript instanceof 内部机制探析
2010/10/15 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
浅析vue-router中params和query的区别
2019/12/24 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
Python标准库内置函数complex介绍
2014/11/25 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
分析Python读取文件时的路径问题
2018/02/11 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
详解python中的异常捕获
2020/12/15 Python
python 基于opencv实现图像增强
2020/12/23 Python
Python用户自定义异常的实现
2020/12/25 Python
最新党员思想汇报
2014/01/01 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
毕业生评语大全
2015/01/04 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python