• php 导航 无限级分类 zendframework


    下面的以zendframework 1为例
     
    <?php
    class Model_DbTable_Category extends Zend_Db_Table{
        protected  $_name="category";
        protected  $_primary="categoryId";
     
        //获取某分类的直接子分类
        function getSons($categorys,$catId=0){
            $sons=array();
            foreach($categorys as $item){
                if($item['parentId']==$catId)
                    $sons[]=$item;
            }
            return $sons;
        }
        
        //获取某个分类的所有子分类
        function getSubs($categorys,$catId=0,$level=1){
            $subs=array();
            foreach($categorys as $item){
                if($item['parentId']==$catId){
                    $item['level']=$level;
                    $subs[]=$item;
                    $subs=array_merge($subs,$this->getSubs($categorys,$item['categoryId'],$level+1));
        
                }
        
            }
            return $subs;
        }
        
        //获取某个分类的所有父分类
        //方法一,递归
        function getParents($categorys,$catId){
            $tree=array();
            foreach($categorys as $item){
                if($item['categoryId']==$catId){
                    if($item['parentId']>0)
                        $tree=array_merge($tree,$this->getParents($categorys,$item['parentId']));
                    $tree[]=$item;
                    break;
                }
            }
            return $tree;
        }
        
        //方法二,迭代
        function getParents2($categorys,$catId){
            $tree=array();
            while($catId != 0){
                foreach($categorys as $item){
                    if($item['categoryId']==$catId){
                        $tree[]=$item;
                        $catId=$item['parentId'];
                        break;
                    }
                }
            }
            return $tree;
        }   
    }
     
     
     
     
     
    <?php
    require_once 'BaseController.php';
    class CategoryController extends  BaseController{
       
     
        public function indexAction(){
            $categoryModel=new Model_DbTable_Category();
            $categorys=$categoryModel->fetchAll()->toArray();
            //获取某分类的直接子分类
            $result=$categoryModel->getSons($categorys,1);
            foreach($result as $item)
                echo $item['categoryName'].'<br>';
            echo '<hr>';
            //获取所欲分类的子分类
            $result=$categoryModel->getSubs($categorys,0);
            foreach($result as $item)
                echo str_repeat('--',$item['level']).$item['categoryName'].'<br>';
            echo '<hr>';
            
             //获取某个分类的所有父分类
             //方法一,递归
            $result=$categoryModel->getParents($categorys,7);
            foreach($result as $item)
                echo $item['categoryName'].' >> ';
            echo '<hr>';
            
            //获取某个分类的所有父分类
            $result=$categoryModel->getParents2($categorys,15);
            foreach($result as $item)
                echo $item['categoryName'].' >> ';
           
        }
        
    }
     
     
     
    数据库部分
     
    CREATE TABLE IF NOT EXISTS `sorts` (
      `sid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
      `sparent` smallint(5) unsigned NOT NULL DEFAULT '0',
      `name` varchar(50) NOT NULL,
      PRIMARY KEY (`sid`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;
     
    INSERT INTO `sorts` (`sid`, `sparent`, `name`) VALUES
    (1, 0, 'php'),
    (2, 0, 'java'),
    (3, 0, 'c/c++'),
    (4, 1, 'php基础'),
    (5, 1, 'php开源资料'),
    (6, 1, 'php框架'),
    (7, 2, 'java Se'),
    (8, 2, 'java EE'),
    (9, 2, 'java Me'),
    (10, 3, 'c/c++基础编程'),
    (11, 3, 'c/c++系统开发'),
    (12, 3, 'c嵌入式编程'),
    (13, 3, 'c++应用开发'),
    (14, 13, 'c++桌面应用开发'),
    (15, 13, 'c++游戏开发');
     
    实现效果图:
  • 相关阅读:
    2019-2020-1 20175317 《信息安全系统设计基础》第二周学习总结
    2019-2020-1 20175317 《信息安全系统设计基础》第一周学习总结
    2018-2019-2 20175317 实验五《网络编程与安全》实验报告
    20175317 《Java程序设计》个人项目
    回文数
    勾股数
    四方定理
    尼科彻斯定理
    实现mypwd
    2019-2020-1 20175301 20175305 20175318 实验五 通讯协议设计
  • 原文地址:https://www.cnblogs.com/xiaocaiabc/p/5154754.html
Copyright © 2020-2023  润新知