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

先上效果图

顶级分类其实就是一级分类,二级分类也叫作一级分类的子分类,在这个基础上,子分类还可以拥有子分类,这样就构成了无限极分类。

接下来看具体实现的代码:

一、在控制器中按字段查询,查询出所有分类信息(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(),用来重复输出'-‘以达到输出时区分级数的效果。

以上这篇创建无限极分类树型结构的简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • PHP实现无限极分类图文教程

    一般来说实现无限极分类都是使用递归或者迭代的方式,小伙伴们看下本文的实现方式吧. 1,数据库设计: 2,代码: 复制代码 代码如下: /**  * @author koma  * @todo   PHP无限极分类  */ $cn = mysql_connect('localhost', 'root', '') or die(mysql_error()); mysql_select_db('t', $cn) or die(mysql_error()); mysql_query('set names

  • PHP无限极分类函数的实现方法详解

    本文实例讲述了PHP无限极分类函数的实现方法.分享给大家供大家参考,具体如下: 在开发程序的时候,有时候,我们需要获取所有栏目(包括一级栏目.二级栏目.三级栏目等等),并按照父子关系形成树型结构.可以采取使用递归或者通过引用方式(php中引用类似C或者C++中的指针,只不过换一种说法而已). 通过引用方式实现无限极分类 思路: 1.即所有待处理的数据进行包装成下标为主键id(pk)的数组,便于有pid获取对应的父栏目. 2.对包装的数据进行循环,如果为根节点,则将其引用添加到tree中,否则,将

  • php通过前序遍历树实现无需递归的无限极分类

    本文实例讲述了php通过前序遍历树实现无需递归的无限极分类.分享给大家供大家参考.具体如下: 大家通常都是使用递归实现无限极分类都知道递归效率很低,下面介绍一种改进的前序遍历树算法,不适用递归实现无限极分类,在大数据量实现树状层级结构的时候效率更高. sql代码如下: CREATE TABLE IF NOT EXISTS `category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(50) NOT NULL, `lft` i

  • PHP超牛逼无限极分类生成树方法

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了. 这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. 复制代码 代码如下: function generateTree($items){     $tree = array();     foreach($items as $item){         if(isset($items[$item['pid']])){             $items[$item[

  • php无限极分类实现的两种解决方法

    今天写了下无限极分类 下面就把代码贴上来了 写的不怎么样. method of classify one 复制代码 代码如下: <?php/* reader: 这是自己写的无限极分类实现方法 里面的编辑方法只是对分类名进行了编辑 没有进行移动操作 小弟能力有限忘大家多多包涵啊 第一种方法:CREATE TABLE `types` (  `type_id` int(11) NOT NULL AUTO_INCREMENT,  `type_name` varchar(20) NOT NULL,  `t

  • php实现smarty模板无限极分类的方法

    本文实例讲述了php实现smarty模板无限极分类的方法.分享给大家供大家参考,具体如下: <?php $conn = mysql_connect("localhost","admin","admin"); mysql_select_db("people_shop",$conn); mysql_query("SET NAMES 'UTF-8'"); $class_arr=array(); $sql =

  • 深入浅析PHP无限极分类的案例教程

    平时开发中或多或少不可避免会遇到无限极分类的问题,因为效率.逻辑等问题也一直使这类问题比较尖锐.今天我们以yii2框架为基础,栏目无限极为例,对这个问题进行一个简单的处理. 首先我们有一张栏目数据表 tree 表结构如下图(原文有图) 看上去表结构很简单. 我们插入几条测试数据 INSERT INTO `tree` (`id`, `parent_id`, `name`) VALUES (1, 0, 'A'), (2, 0, 'B'), (3, 1, 'a'), (4, 3, 'aa'), (5,

  • php 无限极分类

    复制代码 代码如下: <?php /*======================================================== 类名:catalog 功能:无限分级类 方法: 树形显示分类 catalog_show($id) //参数$id 递归调用 流程:找到父分类为0所有根分类-> 一直递归取得所有分类并显示   添加分类 catalog_add($uid,$name) //$uid 父id //$name 分类名   流程:依据$uid,在此id下添加一个新子id

  • php无限极分类递归排序实现方法

    本文实例讲述了php无限极分类递归排序实现方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: function order ($array,$pid=0){     $arr = array();             foreach($array as $v){         if($v['pid']==$pid){             $arr[] = $v;             $arr = array_merge($arr,order($array,$v['

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

    先上效果图 顶级分类其实就是一级分类,二级分类也叫作一级分类的子分类,在这个基础上,子分类还可以拥有子分类,这样就构成了无限极分类. 接下来看具体实现的代码: 一.在控制器中按字段查询,查询出所有分类信息(id:该分类的ID值,cate_name:该分类的名称,pid:父ID,sorts:为显示标题顺序排序做准备,可不写.) public function cate_display() { $cate = D('Cate'); $field = array('id','cate_name','p

  • ajax+asp无限级分类树型结构(带数据库)

    IE测试通过,FF有点小BUG Cls_Leibie.asp 复制代码 代码如下: <% '数据库字段为类属性,添加.删除.修改.操作检查等函数为类的方法 Class Cls_Leibie Private nClassID,sClassName,nParentID,sParentPath,nDepth,nRootID,nChild,nOrderID,sFilePath '定义私有变量(类的属性,即数据库字段对应的变量) Private rs,sql,ErrorStr Private Sub Cl

  • ajax+asp无限级分类树型结构的代码

    复制代码 代码如下: <% '数据库字段为类属性,添加.删除.修改.操作检查等函数为类的方法 Class Cls_Leibie     Private nClassID,sClassName,nParentID,sParentPath,nDepth,nRootID,nChild,nOrderID,sFilePath '定义私有变量(类的属性,即数据库字段对应的变量)     Private rs,sql,ErrorStr Private Sub Class_Initialize()       

  • PHP实现无限极分类生成分类树的方法

    本文实例讲述了PHP实现无限极分类生成分类树的方法.分享给大家供大家参考,具体如下: 现在的分类数据库设计基本都是:每一个分类有一个id主键字段,一个pid指向父类的id,这样便可实现无限级分类,取出的数据就是如下的格式: $arr = array( array("id" => 1 , "pid" => 0 , 'cat' => '栏目一'), array("id" => 2 , "pid" =>

  • sqlserver实现树形结构递归查询(无限极分类)的方法

    SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一次(但在其作用域内可以被引用任意次),并且在该查询生存期间将一直生存.可以使用CTE来执行递归操作.创建的语法是: with <name of you cte>(<column names>) as( <actual query> ) select * from

随机推荐