無極分類屬於現在比較難攻克的一關,現在就把代碼貼出來,有需要的朋友可以根據實際需要擴展一下。
//假設分類關系為“ 地球”(id為1,父id為0),“國家”(id為2,父id為1),“省份”(id為5,父id為2),城市(id為9,父id為5),地區(id為14,父id為9)
<?php
//獲取子分類
function getChildId($parentid=0) //形參傳入父id,方便抓取子分類數組。
{
mysql_connect("localhost","root","");
mysql_query("set names utf8");
$sql="select * from `category` where parentid='{$parentid}' limit 100"; //從數據表 ·分類· 中,根據父id的值抓取一組子分類。默認值為0,故抓取到的為地球。
$result=mysql_query($sql);
$results=array(); //聲明一個空數組,方便裝入子分類。
while($child=mysql_fetch_assoc($result)) //通過while循環抓取返回給$child
{
$results[]=$child; //把子分類組里的數據插入到$results這個數組中
}
return $results; //把結果返回給函數,默認為一個包含地球的組。
}
//函數getChildId()返回的是子分類數組
function getTree($parentid=0,$treeArray=array())
{
$child = getChild($parentid); //返回的是形參輸入的父id下面的子分類組,默認為一個包含國家的組。
foreach($child as $baby) //$baby此時為一個一個的國家
{
$treeArray[]=$baby; //將默認傳入的一個空數組裝入子分類的數據,首先轉入的為地球。
$treeArray = getTree($baby['id'],$treeArray); //函數回調,形成一個循環。當$child的值為0時,即父id下面沒有子分類時。跳過foreach語句,直接執行下一句
}
return $treeArray; //return裝着子分類的數組,返回給函數,
}
//運行函數 返回$treeArray;
$tree = getTree();
var_dump($tree);
?>
下面再來看一段新的代碼:
header('Content-Type:text/html;charset=utf-8'); //告訴瀏覽器用utf-8編碼閱讀
mysql_connect("localhost","root","");
mysql_select_db("cms4");
mysql_query("set names utf8");
function getList($pid = 0) //抓取子分類的函數
{
//按新聞分類表的 父id查找 子分類列表
$sql = "select * from news_categorys where pid = '{$pid}' limit 100";
$query = mysql_query($sql);
if(!$query)
{
//有錯報錯
die(mysql_error());
}
$lists = array();
//在結果集里取一行
while($row = mysql_fetch_assoc($query))
{
$lists[] = $row;
}
return $lists;
}
//獲得所有分類的數組
function getTree($pid = 0,$typeTree = array(),$level = 0)
{
$list = getList($pid); //獲取默認父id為0的子分類
var_dump($list); //將子分類輸出
foreach($list as $l)
{ //當$list是空數組時,foreach不會執行
$levelStr = '<font color="red">';
for($i=0;$i<$level;$i++)
{
$levelStr.='|-';
}
$levelStr .= '</font>'; //$levelStr = $levelStr.'</font>'
$l['name'] = $levelStr.$l['name'];
$typeTree[] = $l;
//逐層深入遞歸
$typeTree = getTree($l['id'],$typeTree,$level+1); //獲取下一級分類
//$level 指子分類層級
}
return $typeTree;
}
$tree = getTree(); //將所有父和子分類賦值給$tree
//var_dump($tree);
foreach ($tree as $v)
{
echo $v["name"]."<br />"; //
}