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


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 相关文章推荐
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
Jan 10 PHP
PHP循环结构实例讲解
Feb 10 PHP
Chrome Web App开发小结
Sep 04 PHP
php上传文件常见问题总结
Feb 03 PHP
php 实现301重定向跳转实例代码
Jul 18 PHP
php json相关函数用法示例
Mar 28 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP递归实现快速排序的方法示例
Dec 18 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
使用PHP访问RabbitMQ消息队列的方法示例
Jun 06 PHP
PHP二维数组分页2种实现方法解析
Jul 09 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
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
建筑施工实习自我鉴定
2013/09/19 职场文书
国际经济贸易专业推荐信
2013/11/06 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
个人务虚会发言材料
2014/10/20 职场文书
单位婚育证明范本
2014/11/21 职场文书
锦旗赠语
2015/06/23 职场文书
如何写通讯稿
2015/07/22 职场文书
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python