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


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源码加密 仿微盾PHP加密专家(PHPCodeLock)
May 06 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
May 14 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
Jan 06 PHP
你可能不知道PHP get_meta_tags()函数
May 12 PHP
php实现压缩多个CSS与JS文件的方法
Nov 11 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
php微信高级接口群发 多客服
Jun 23 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
Oct 12 PHP
php学习笔记之字符串常见操作总结
Jul 16 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
动态新闻发布的实现及其技巧
2006/10/09 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
Vue集成Iframe页面的方法示例
2017/12/12 Javascript
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
记录一次websocket封装的过程
2020/11/23 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
python之信息加密题目详解
2019/06/26 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
关于Python turtle库使用时坐标的确定方法
2020/03/19 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
应聘护士自荐信
2013/10/21 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
经理助理岗位职责
2014/03/05 职场文书
房产继承公证书
2014/04/09 职场文书
会计求职自荐信范文
2015/03/04 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python