1、首先創建分類表 category
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、插入測試數據
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`) ) ; 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++游戲開發');
3、通過父級找子級
3.1、找某一個父級的直接子集
function getSons($categorys,$catId=0){ $sons= []; foreach($categorys as $item){ if($item['parentId']==$catId) $sons[]=$item; } return $sons; }
3.2、獲取某個分類的所有子集
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; }
4、通過子級找父級
4.1、獲取某一個子類的所有父級 遞歸
public function getParents($categorys,$parentId = '') { $tree = []; if($data){ foreach ($categorysas $item){ if($parentId != ''){ if($item['categoryId'] == $parentId){ $tree[] = $item; $tree = array_merge($tree,$this->getAccordOe($data,$item['parentId'])); } } } return $tree; } }
4.2、獲取某一個子類的所有父級 迭代
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; }
摘自:https://blog.csdn.net/shinebxy/article/details/87713784