码迷,mamicode.com
首页 > 其他好文 > 详细

无限极分类信息

时间:2015-01-17 09:54:41      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

1.数据库设计:

CREATE TABLE `smar_category` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 栏目ID,
  `pid` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT 父ID,
  `catname` varchar(30) NOT NULL COMMENT 栏目名称,
  `sort` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT 排序,
  PRIMARY KEY (`id`),
  INDEX pid (pid)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

2.思路:

    ①设置pid 保存父级栏目

    ②取出所有数据

    ③调用递归函数进行排序

3.源码

 1     /**
 2      * 将数据按照级别排序
 3      * @return array 返回排序好的
 4      */
 5     public function reSort(){
 6         //1.先取出所有的数据
 7         $allCategory = $this->order(‘sort desc‘)->select();    
 8         //2.调用递归函数进行排序
 9         return $this->_reSort($allCategory);
10     }
11     /**
12      * 递归排序
13      * @param array $data 数组
14      * @param int $parend_id 父级
15      * @param int $level 标识当前记录是第几层的
16      * @return array 返回排序好的
17      */
18     public function _reSort($data,$parend_id = 0,$level=0){
19         static $_ret = array();
20         foreach($data as $k=>$v){
21             if($v[‘pid‘] == $parend_id){
22                 //标识当前记录是第几层的
23                 $v[‘level‘] =$level;
24                 $_ret[] =$v;
25                 //把这条记录从数组中删除,再找子类不用循环这条记录了
26                 unset($data[$k]);
27                 //再找当前这条记录的所有的子类
28                 $this->_reSort($data, $v[‘id‘],$level+1);
29             }
30         }
31         return $_ret;
32     }

4.删除栏目

 1     /**
 2      * 递归找出一个栏目的所有子栏目并且进行删除
 3      * @param  int $parend_id 父级
 4      * @return array 返回排序好的
 5      */
 6     public function getChildId($parent_id){
 7         //1.取出所有的栏目
 8         $allCat = $this->order(‘sort desc‘)->select();
 9         //2.调用递归函数在所有的栏目中找子栏目
10         return $this->_findChildId($allCat, $parent_id);
11     }
12     /**
13      * 递归排序
14      * @param array $data 数组
15      * @param int $parend_id 父级
16      * @return array 返回排序好的
17      */
18     public function _findChildId($data,$parent_id){
19         static $ret = array();
20         foreach($data as $k=>$v){
21             if($v[‘pid‘] == $parent_id){
22                 $ret[] = $v[‘id‘];
23                 //把记录从元数字中删除掉,再循环记录不用在判断这条记录
24                 unset($data[$k]);
25                 //再找这个条记录的子栏目
26                 $this->_findChildId($data,$v[‘id‘]);
27             }
28         }
29         return $ret;
30     }
31     
32     

 

无限极分类信息

标签:

原文地址:http://www.cnblogs.com/subtract/p/4230145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!