无限分类树操作
2015-07-14 19:50
405 查看
获取相应分类id的分类树:
递归查找无限分类的父节点:
从内存查询 表 以防止多次查库:
public static function getCategoryTree($id){ //$model=M('category'); if($id>0){ $obj=self::selectTable('category',array('id'=>$id),true);//$model->where(array('id'=>$id))->find(); if(!is_null($obj)){ $childList=self::selectTable('category',array('parent_id'=>$id));//$model->where(array('parent_id'=>$id))->select(); if(!is_null($childList)){ foreach($childList as $val){ $obj['childList'][]=self::getCategoryTree($val['id']); } } } if(isset($obj['childList'])){ //二维数组排序 usort($obj['childList'],function($a,$b){ $subtractRes=$a['order']-$b['order']; if($subtractRes<0){ return 1; }elseif($subtractRes>0){ return -1; }else{ return 0; } }); } return $obj; }else{ $rootList=self::selectTable('category',array('parent_id'=>$id));//$model->where(array('parent_id'=>$id))->select(); if(!is_null($rootList)){ foreach($rootList as &$val){ $val=self::getCategoryTree($val['id']); } } return $rootList; } }
递归查找无限分类的父节点:
//递归查找无限分类的父节点 public static function getCategoryParent($categoryId){ $category=self::selectTable('category',array('id'=>$categoryId),true);// M('category')->where(array('id'=>$categoryId))->find(); if(!empty($category)){$category['parent']=self::getCategoryParent($category['parent_id']); } return $category; }
从内存查询 表 以防止多次查库:
//从内存查询 表 以防止多次查库 private static function selectTable($tableName,array $where,$getFirst=false){ $res=array(); if(!isset(self::$tableData[$tableName])){ self::$tableData[$tableName]=M($tableName)->select(); } if(false===self::$tableData[$tableName]){ return false; } is_null(self::$tableData[$tableName]) and self::$tableData[$tableName]=array(); foreach(self::$tableData[$tableName] as $val){ $flag=true; foreach($where as $k=>$v){ if($val[$k]!=$v){ $flag=false; break; } } $flag and $res[]=$val; } $getFirst and $res=current($res); empty($res) and $res=null; return $res; }
相关文章推荐
- espcms内容页相册调用代码
- c++对象模型-the semantics of constr ad97 uctors
- 【SeekBar】Android 自定义漂亮的SeekBar样式
- debian 8下修改默认编辑器
- C8_指针练习
- LeetCode题解——Generate Parentheses
- 大楼扔鸡蛋问题(动态规划)
- 【Spark】SparkContext源码解读
- 【Spark】Spark的Shuffle机制
- [转载] 最全最强解析:支付宝系统架构内部剖析(架构图)
- C8_指针
- Class文件结构
- VB编程概述
- 大数开根号(蓝桥杯-矩阵翻硬币)
- 架构师速成6.5-也谈设计模式
- iOS为什么Block的属性声明要用copy
- 【Spark】Spark容错机制
- 架构师速成6.5-也谈设计模式 分类: 架构师速成 2015-07-14 19:48 284人阅读 评论(0) 收藏
- 【leetcode】二叉树的LCA问题:Lowest Common Ancestor of a Binary Tree
- 机房收费系统之初体验