php无限极分类

(1)sql建表

CREATE TABLE IF NOT EXISTS `category` (
  `categoryId` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `parentId` smallint(5) unsigned NOT NULL DEFAULT '0',
  `categoryName` varchar(50) NOT NULL,
  PRIMARY KEY (`categoryId`)
)  ;

(2)插入若干数据:

 

INSERT INTO `category` (`categoryId`, `parentId`, `categoryName`) 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++游戏开发'); 

 

php代码:

 

 //获取某分类的直接子分类  
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,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,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
$conn=mysql_connect('localhost','root','root',true);
mysql_select_db('citest',$conn);
mysql_query("set names utf8");
$arr = mysql_query("select * from category");
while($rel = mysql_fetch_ASSOC($arr)){
 $categorys[] = $rel;
}
  
$result=getSons($categorys,1);  
foreach($result as $item)  
    echo $item['categoryName'].'<br>';  
echo '<hr>';  
  
$result=getSubs($categorys,0);  
foreach($result as $item)  
    echo str_repeat('  ',$item['level']).$item['categoryName'].'<br>';  
echo '<hr>';  
  
$result=getParents($categorys,7);  
foreach($result as $item)  
    echo $item['categoryName'].' >> ';  
echo '<hr>';  
  
$result=getParents2($categorys,15);  
foreach($result as $item)  
    echo $item['categoryName'].' >> ';

 

 对应运行的结果

php无限极分类_第1张图片

 

你可能感兴趣的:(php无限极分类)