内容简介:thinkphp之超级无限分类 10行代码 (转载 已测试)
效果图
核心代码如下
static public $treeList = array(); //存放无限分类结果如果一页面有多个无限分类可以使用 Tool::$treeList = array(); 清空 /** * 无限级分类 * @access public * @param Array $data //数据库里获取的结果集 * @param Int $pid * @param Int $count //第几级分类 * @return Array $treeList */ static public function tree(&$data,$pid = 0,$count = 1) { foreach ($data as $key => $value){ if($value['Pid']==$pid){ $value['Count'] = $count; self::$treeList []=$value; unset($data[$key]); self::tree($data,$value['Id'],$count+1); } } return self::$treeList ; } }
$treeList[] 保存 排序 的结果 基本就是进行了一次排序 保存后就可以 unset($data[$key]); 掉
因为已经使用不到了&$data 使用按地址传参,结合unset($data[$key]);
不然会显示不完全
$value['Count'] = $count; 为当前的等级
在模板里会通过等级进行生成树形结构排序前后的数据结构
排序前的数据结构
id pid
1 0
2 0
3 1
4 3
排序后的数据结构
id pid count
1 0 1
3 1 2
4 3 3
2 0 1
public function index() { $menu = M('Menu'); $list = $menu->order('**Pid ASC**,Morder DESC,Id ASC')->select(); $this->assign('List',Tool::tree($list)); $this->display(); }
控制器里调用
<table class="table table-hover table-bordered table-list"> <thead> <tr> <th width="100">菜单名称</th> </tr> </thead> <foreach name="List" item="vo" key="k"> <tr> <td style="text-indent:{$vo['Count']*20}px;"> <neq name="vo.Count" value="1">| -- </neq> {$vo.we_menu_name} </td> </tr> </foreach> </table>
模板使用里<volist> 正常输出可
把需要生成树结构的字段 修改成如上测试了
如果是3000条的话 用时 0.5秒 1000个的话 0.02秒的左右
超过3000效率就会大幅度降低 2000左右的效率还是比较高的
顺便贴一下我自己整理的
控制器代码
public function index(){ $menu = M('we_menu'); $list = $menu->order('we_menu_leftid ASC,id ASC')->select(); $this->assign('List',$this->tree($list)); $this->display(); } static public $treeList = array(); //存放无限分类结果如果一页面有多个无限分类可以使用 Tool::$treeList = array(); 清空 /** * 无限级分类 * @access public * @param Array $data //数据库里获取的结果集 * @param Int $pid * @param Int $count //第几级分类 * @return Array $treeList */ static public function tree(&$data,$pid = 0,$count = 1) { foreach ($data as $key => $value){ if($value['we_menu_leftid']==$pid){ $value['Count'] = $count; self::$treeList []=$value; unset($data[$key]); self::tree($data,$value['id'],$count+1); } } return self::$treeList ; }
index.HTML
<table class="table table-hover table-bordered table-list"> <thead> <tr> <th width="30">菜单名称</th> </tr> </thead> <foreach name="List" item="vo" key="k"> <tr> <td style="text-indent:{$vo['Count']*20}px;"> <neq name="vo.Count" value="1">| -- </neq> {$vo.we_menu_name} </td> </tr> </foreach> </table>
数据库截图:
数据表生成sql:
/* Navicat MySQL Data Transfer Source Server : bendi Source Server Version : 50617 Source Host : localhost:3306 Source Database : thinkcmf Target Server Type : MYSQL Target Server Version : 50617 File Encoding : 65001 Date: 2017-10-31 11:26:14 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for cmf_we_menu -- ---------------------------- DROP TABLE IF EXISTS `cmf_we_menu`; CREATE TABLE `cmf_we_menu` ( `id` tinyint(11) NOT NULL AUTO_INCREMENT, `we_menu_name` varchar(20) NOT NULL COMMENT '菜单名称', `we_menu_leftid` int(11) NOT NULL COMMENT '菜单上级ID', `we_menu_type` tinyint(2) NOT NULL COMMENT '菜单类型 1为弹出 2为链接', `we_menu_typeval` varchar(200) NOT NULL COMMENT '菜单类型值', `is_del` tinyint(2) NOT NULL DEFAULT '0' COMMENT '假删', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of cmf_we_menu -- ---------------------------- INSERT INTO `cmf_we_menu` VALUES ('10', '菜单一', '0', '2', 'http://www.jianshu.com/u/7a66106d8bce', '0'); INSERT INTO `cmf_we_menu` VALUES ('11', '菜单二', '0', '1', '', '0'); INSERT INTO `cmf_we_menu` VALUES ('12', '菜单三', '0', '1', '', '0'); INSERT INTO `cmf_we_menu` VALUES ('13', '二级菜单', '11', '2', 'http://www.jianshu.com/u/7a66106d8bce', '0'); INSERT INTO `cmf_we_menu` VALUES ('14', '三级菜单', '12', '2', 'http://www.jianshu.com/u/7a66106d8bce', '0');
最后效果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- (授权转载)10段奇葩的代码注释
- 创建自己的 CSS 网格系统【转载 | 译】
- [MySQL]长连接和短链接(转载)
- Windows Phone开发(一)-- 开发环境和结构【转载】 - dekevin
- Windows Phone开发(一)-- 开发环境和结构【转载】 - dekevin
- 使用Travis CI自动部署Hexo【转载修订版】
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Book of CSS3
Peter Gasston / No Starch Press / 2011-5-13 / USD 34.95
CSS3 is the technology behind most of the eye-catching visuals on the Web today, but the official documentation can be dry and hard to follow. Luckily, The Book of CSS3 distills the heady technical la......一起来看看 《The Book of CSS3》 这本书的介绍吧!