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


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入门
Oct 09 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
php对二维数组进行排序的简单实例
Dec 19 PHP
php微信支付之APP支付方法
Mar 04 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
PHP中error_reporting()用法详解
Aug 31 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
总结对比php中的多种序列化
Aug 28 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 PHP
php 中的信号处理操作实例详解
Mar 04 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 simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
用js来解决ajax读取页面乱码
2010/11/28 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
Python使用新浪微博API发送微博的例子
2014/04/10 Python
Python实现的数据结构与算法之链表详解
2015/04/22 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
Python基于Tensor FLow的图像处理操作详解
2020/01/15 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
浅谈Python 函数式编程
2020/06/20 Python
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
五年后的职业生涯规划
2014/03/04 职场文书
运动员口号
2014/06/09 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
2014年双拥工作总结
2014/11/21 职场文书
学术会议邀请函
2015/01/30 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
情况说明书怎么写
2015/10/08 职场文书