首页 > 代码库 > 无限极分类信息

无限极分类信息

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     

 

无限极分类信息