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


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 相关文章推荐
第三节 定义一个类 [3]
Oct 09 PHP
社区(php&amp;&amp;mysql)三
Oct 09 PHP
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
一个PHP数组应该有多大的分析
Jul 30 PHP
基于php验证码函数的使用示例
May 03 PHP
用PHP代替JS玩转DOM的思路及示例代码
Jun 15 PHP
浅析THINKPHP的addAll支持的最大数据量
Feb 03 PHP
php通过function_exists检测函数是否存在的方法
Mar 18 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
php封装一个异常的处理类
Jun 08 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
thinkPHP和onethink微信支付插件分享
Aug 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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
2014/04/08 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
基于node.js的快速开发透明代理
2010/12/25 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
Jquery 点击按钮自动高亮实现原理及代码
2014/04/25 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
windows下ipython的安装与使用详解
2016/10/20 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
python调用API实现智能回复机器人
2018/04/10 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
django的登录注册系统的示例代码
2018/05/14 Python
python读取xlsx的方法
2018/12/25 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
国际贸易专业个人求职信格式
2014/02/02 职场文书
运动会演讲稿100字
2014/08/25 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
大学校园招聘会感想
2015/08/10 职场文书
运动会跳远广播稿
2015/08/19 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书
初中历史教学反思
2016/02/19 职场文书
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫