无限极分类

mysql> use admin
Database changed
mysql> create table cate(
    -> id int unsigned not null primary key auto_increment,
    -> name char(15) not null,
    -> pid int unsigned not null,
    -> sort smallint(6) not null);
Query OK, 0 rows affected (0.48 sec)

mysql> desc cate;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | char(15)         | NO   |     | NULL    |                |
| pid   | int(10) unsigned | NO   |     | NULL    |                |
| sort  | smallint(6)      | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+

  

public function index(){
            import('common.category',COMMON_PATH);
            $cate=M('cate')->order('sort ASC')->select();
            $catea=new category();
            $catex=$catea::zifenleia($cate);

            print_r($catex);
//            $this->assign('catex',$catex);
//            $this->display();
        }

        public  function addcate(){
//            $pid=isset($_GET['pid'])?$_GET['pid']:0;
            $this->pid=I('pid',0,'intval');
            $this->display();
        }

        public  function ADDreturn(){
            if(M('cate')->add($_POST)){
                $this->success('添加成功',U(MODULE_NAME.'/Category/index'));
            }else{
                $this->error('出错');
            }
        }
        //排序
        public function sort(){
            $db=M('cate');
           foreach($_POST as $id=>$sort){
               $db->where(array('id'=>$id,))->setField(array('sort'=>$sort));
           }
            $this->redirect(MODULE_NAME.'/category/index');

        }
        //删除
        public function delete(){
            $db=M('cate');

        }

}
class Category{
            /**
             * 组合一维数组,用于输出顶级栏目所属的二级栏目
             */
            Static Public function unlimitedForLevel($m, $html='--', $f_id=0, $level=0){
                $arr=array();
                foreach ($m as $v){
                    if ($v['f_id'] == $f_id){
                        $v['level']=$level+1;
                        $v['html']=str_repeat($html,$level);
                        $arr[]=$v;
                        $arr=array_merge($arr,self::unlimitedForLevel($m,$html,$v['id'],$level+1));
                    }
                }
                
                return $arr;
            }
            
            /**
             * 多维数组,用于在前台输出含有二级栏目的导航条
             */
            Static Public function unlimitedForLayer ($m, $name = 'child', $f_id = 0) {
                $arr = array();
                foreach ($m as $v) {
                    if ($v['f_id'] == $f_id) {
                        $v[$name] = self::unlimitedForLayer($m, $name, $v['id']);
                        $arr[] = $v;
                    }
                }
                return $arr;
            }
            
            /**
             * 传递一个子分类ID返回所有的父级分类
             */
            Static Public function getParents ($m, $id) {
                $arr = array();
                foreach ($m as $v) {
                    if ($v['id'] == $id) {
                        $arr[] = $v;
                        $arr = array_merge(self::getParents($m, $v['f_id']), $arr);
                    }
                }
                return $arr;
            }
            
            /**
             * 传递一个父级分类ID返回所有子分类
             */
            Static Public function getChilds ($m, $f_id) {
                $arr = array();
                foreach ($m as $v) {
                    if ($v['f_id'] == $f_id) {
                        $arr[] = $v;
                        $arr = array_merge($arr, self::getChilds($m, $v['id']));
                    }
                }
                return $arr;
            }
            

            /**
             * 传递一个父级分类ID返回所有子分类ID(注意:这里的f_id是栏目表的父级id,根据数据库表的名字填写)
             */
            Static Public function getChildsId ($m, $f_id) {
                $arr = array();
                foreach ($m as $v) {
                    if ($v['f_id'] == $f_id) {
                        $arr[] = $v['id'];
                        $arr = array_merge($arr, self::getChildsId($m, $v['id']));
                    }
                }
                return $arr;
            }
            
            
            /**
             * 传递一个子分类ID返回父级分类ID(注意:这里的f_id是栏目表的父级id,根据数据库表的名字填写)
             */
            Static Public function getfId ($m, $id) {
                $arr = array();
                foreach ($m as $v) {
                    if ($v['id'] == $id) {
                        $arr[] = $v['f_id'];
                        $arr = array_merge($arr, self::getfId($m, $v['f_id']));
                    }
                }
                return $arr;
            }
            
            
}
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => PHP
            [pid] => 0
            [sort] => 1
            [child] => Array
                (
                    [0] => Array
                        (
                            [id] => 4
                            [name] => PHP1
                            [pid] => 1
                            [sort] => 100
                            [child] => Array
                                (
                                )

                        )

                    [1] => Array
                        (
                            [id] => 6
                            [name] => sdasd
                            [pid] => 1
                            [sort] => 100
                            [child] => Array
                                (
                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 2
            [name] => MYSQL
            [pid] => 0
            [sort] => 2
            [child] => Array
                (
                    [0] => Array
                        (
                            [id] => 5
                            [name] => MYSQL   2
                            [pid] => 2
                            [sort] => 100
                            [child] => Array
                                (
                                )

                        )

                )

        )

    [2] => Array
        (
            [id] => 3
            [name] => LInux
            [pid] => 0
            [sort] => 3
            [child] => Array
                (
                )

        )

)
原文地址:https://www.cnblogs.com/mengluo/p/5139012.html