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


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自定义函数返回多个值
Nov 26 PHP
一个php Mysql类 可以参考学习熟悉下
Jun 21 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
php开发中的页面跳转方法总结
Apr 26 PHP
PHP自毁程序(慎用)
Jul 09 PHP
PHP实现简单实用的验证码类
Jul 29 PHP
PHP中两个float(浮点数)比较实例分析
Sep 27 PHP
php 访问oracle 存储过程实例详解
Jan 08 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
php判断电子邮件是否正确方法
Dec 04 PHP
PHP命名空间(namespace)原理与用法详解
Dec 11 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
图象函数中的中文显示
2006/10/09 PHP
mysql+php分页类(已测)
2008/03/31 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
linux下php上传文件注意事项
2016/06/11 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
Python修改Excel数据的实例代码
2013/11/01 Python
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
python实现排序算法解析
2018/09/08 Python
python分数表示方式和写法
2019/06/26 Python
在python里面运用多继承方法详解
2019/07/01 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
pycharm安装及如何导入numpy
2020/04/03 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
你的自行车健身专家:FaFit24
2016/11/16 全球购物
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
如何查找网页漏洞
2016/06/22 面试题
教师自我鉴定范文
2013/11/10 职场文书
校园自助餐厅的创业计划书
2013/12/26 职场文书
会计专业自我鉴定
2014/02/10 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
工作失误检讨书
2015/01/26 职场文书
国庆节主题班会
2015/08/15 职场文书