在商城项目或者其他的项目中无极限分类是非常常见的场景 那么许多人都会这样干 利用递归每次查询数据库,说来惭愧,我以前也是这样干的 总有点误人子弟的感觉 这样做在数据量大的情况下会有一定的延迟

public function actionTree($id = 0)

{
$arr = array();
$child = Cate::model()->cateTree($id);//每次都查询一次数据库
// var_dump($child);
if(!empty($child)){
foreach ($child as $k => &$v) {
$v['child'] = $this->actionTree($v['id']);
$arr[] = $v;
}
}
return $arr;
}

那么这种现在可以pass掉了,

解决的思路是 先一次性查询出全部的分类信息  然后从顶级分类开始 利用循环判断当前分类数据的是不是默认分类的父级分类如果是的话则递归调用,最后移除当前数据

这是控制器代码

public function actionIndex()
{
$model =new GoodsCate();
$catelist = $model->findCate();
$list = $this->actionCate($catelist,array());
return $this->render('//goodscate/index', [
'list' => $list,
]);
}
/**
* 将普通数组构造成树形结构数据
*/
public function actionCate(&$info, $child, $pid = 0)
{
$child = array();
if(!empty($info)){//当$info中的子类还没有被移光的时候
foreach ($info as $k => &$v) {
if($v['parentid'] == $pid){//判断是否存在子类pid和返回的父类id相等的
$v['child'] = $this->actionCate($info, $child, $v['id']);//每次递归参数为当前的父类的id
$child[] = $v;//将$info中的键值移动到$child当中
unset($info[$k]);//每次移动过去之后删除$info中当前的值
}
}
}
return $child;//返回生成的树形数组
} 这是模型代码
//得到全部的分类用于生成树状结构数据, 但是此时还是普通二位数组
public function findCate(){
$list = (new Query())
->from('table_cate')
->all();
return $list;
}

得到的数据格式

这是表结构

这样做避免了多次查询数据库,从而提高响应时间 比每次递归查询效果要好的多

yii2 实现无极限分类的更多相关文章

  1. Yii2.0 添加分类category model类

    <?php namespace app\models; use yii\db\ActiveRecord; use Yii; use yii\helpers\ArrayHelper; class ...

  2. php无极限分类函数

    /** * [make_tree description] * @Author Lerko * @DateTime 2017-04-01T14:57:24+0800 * @param [type] $ ...

  3. Yii2基本概念之——事件(Event)

    说起事件(event),我们可是一点都不陌生.现实生活当中的事件无处不在,比如你发了一条微博,触发了一条事件,导致关注你的人收到了一条消息,看到你发的内容:比如你通过支付宝买东西,付了款,触发一个事件 ...

  4. php 面试常问 基础知识

    字符串都是海针 数组是针海 输出及打印 echo 8%(-2); //输出结果为0 模后的正负号可无视 模前的有用 echo date('Y-m-d H:i:s',strtotime('-1 day' ...

  5. php小白和菜鸟 上班路上可以看的修行博客

    上班地铁 公交上我们不要去追剧 不要去打游戏 不要看看有效性的海量新闻, 我们需要去技术博客里遨游, 下面就推荐点与php有关的可以学习的技术博客; 大部分程序员在自学的道路上不知道走了多少坑,这个视 ...

  6. PHP函数高级(二)

    PHP函数基础:https://www.cnblogs.com/lxwphp/p/9867840.html   1.函数分类: 定义:完成某些功能的代码段 系统函数:字符串,数组,数字,日期时间 自定 ...

  7. yii2 开源插件与系统

    yii2干货集:https://github.com/forecho/awesome-yii2 商城 samdark/yii2-shop composer global require "f ...

  8. 谈一次php无限极分类的案例

    作者:白狼 出处:http://www.manks.top/php_tree_deep.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追 ...

  9. yii2干货

    Sites 网站 yiifeed:Yii 最新动态都在这里 yiigist:Yii 专用的 Packages my-yii:Yii 学习资料和新闻 Docs 文档 Yii Framework 2.0 ...

随机推荐

  1. 区分json与jsonp

    JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不是一回事儿,下边简单区分概括一下: JSON是 ...

  2. (转)windows 下 Java 及 Python 环境变量设置

    转自:http://www.cnblogs.com/zhj5chengfeng/archive/2013/01/01/2841253.html http://www.cnblogs.com/qiyes ...

  3. 【Codeforces Round #434 (Div. 1) B】Polycarp's phone book

    [链接]h在这里写链接 [题意] 给你n个电话号码. 让你给每一个电话号码选定一个字符串s; 使得这个串s是这个电话号码的子串. 且不是任何一个其他电话号码的子串. s要求最短. [题解] 字典树. ...

  4. RMQ问题-ST方法

    参考 http://blog.csdn.net/sdj222555/article/details/7875575 RMQ 就是 Range Minimum/Maximum Query 就是求区间最值 ...

  5. (转)c++ 中的using namespace std是什么意思,什么时候用

    使用std命名空间 98年以后的c++语言提供一个全局的命名空间namespace,可以避免导致全局命名冲突问题.举一个实例,请注意以下两个头文件: // one.hchar func(char);c ...

  6. windows版 nginx配置反向代理实例教程 跳转tomcat和php网站

    抄自 https://www.cnblogs.com/j-star/p/8785334.html 个人理解 nginx端口设置为80,简称n tomcat端口设置为其他,例如8080,简称t php网 ...

  7. mybatis-generator使用

    开发工具:eclipse,依赖环境 :maven 首先在eclipse marketplace中安装mybatis-generator,如图: 安装后需要重启. 新建一个maven项目MybatisG ...

  8. self.view.layer.contents 和 self.view.backgroundColor

    一. self.view.layer.contents 和 self.view.backgroundColor 今天测了一下 :    self.view.layer.contents 和 self. ...

  9. P2P平台的"我要借款"功能,是否需要上传借款人的相关资料

     P2P平台的前端系统,一般都会有"我要借款"这个功能.有的平台,非常重视这个功能, 把它作为主要菜单的其中一项.有的把它看得相对次要,放在顶部Top栏中. 毕竟P2P平台,其实主 ...

  10. AE开发技术文档--8种数据访问方法

    转自原文 AE开发技术文档--8种数据访问方法 1.shapefile IWorkspaceFactory pWorkspaceFactory; pWorkspaceFactory = new Sha ...