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


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 相关文章推荐
Adodb的十个实例(清晰版)
Dec 31 PHP
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
Jul 21 PHP
关于Intype一些小问题的解决办法
Mar 28 PHP
一步一步学习PHP(7) php 字符串相关应用
Mar 05 PHP
ThinkPHP连接数据库的方式汇总
Dec 05 PHP
php天翼开放平台短信发送接口实现方法
Dec 22 PHP
php实现TCP端口检测的方法
Apr 01 PHP
php 使用curl模拟登录人人(校内)网的简单实例
Jun 06 PHP
微信开发之php表单微信中自动提交两次问题解决办法
Jan 08 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 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
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
简单JS代码压缩器
2006/10/12 Javascript
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
[16:56]教你分分钟做大人:司夜刺客
2014/10/30 DOTA
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
python生成任意频率正弦波方式
2020/02/25 Python
pycharm安装及如何导入numpy
2020/04/03 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
耐克美国官网:Nike.com
2016/08/01 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
业务员岗位职责
2013/11/16 职场文书
《都江堰》教学反思
2014/02/07 职场文书
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
租房安全协议书
2014/08/20 职场文书
车辆年审委托书范本
2014/09/18 职场文书
大学生见习报告范文
2014/11/03 职场文书
普宁寺导游词
2015/02/04 职场文书
2015年统战工作总结
2015/05/19 职场文书
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers