PHP無限級分類之下拉列表式分類(上)
實現(xiàn)原理圖
下拉列表式無限級分類
<?php include ("conn.php"); function getList($pid=0,&$result=array(),$space=0){ $space=$space+2; $sql="SELECT*FROM deepcate WHERE pid = $pid"; $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)){ $row['catename']=str_repeat(' ',$space).'|--|'.$row['catename']; $result[]=$row; getList($row['id'],$result,$space); } return $result; } $rs=getList(); function displayCate($pid=0,$selected=1){ $rs=getList($pid); $str=''; $str.="<select name='cate'>"; foreach ($rs as $key=>$val){ $selectedstr=''; if ($val['id'] == $selected){ $selectedstr="selected"; } $str.="<option{$selectedstr}>{$val['catename']}</option>"; } return $str.='</select>'; } echo displayCate(0,2); ?>
實例就是一個無限級分類,下面我們就對代碼進(jìn)行分段的講解。
代碼解釋:
<?php include ("conn.php"); function getList($pid=0,&$result=array(),$space=0){ $space=$space+2; $sql="SELECT*FROM deepcate WHERE pid = $pid"; $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)){ $row['catename']=str_repeat(' ',$space).'|--|'.$row['catename']; $result[]=$row; getList($row['id'],$result,$space); } return $result; } $rs=getList(); ?>
function getList($pid=0){ } ?>
首先定義一個函數(shù),pid作為父類ID,定義為0。
$sql="SELECT*FROM deepcate WHERE pid = $pid";
使用sql語句,查詢pid選面的子類。
$res = mysql_query($sql); //執(zhí)行sql語句 $result=array(); while ($row = mysql_fetch_assoc($res)){ $result[]=$row; } return $result;
把結(jié)果放入數(shù)組中,然后返回到result中。
遞歸是函數(shù)自身調(diào)用自身的技巧,我們在查詢子類 的 時候需要調(diào)用到getList($row['id']);
子類的ID要作為下一級的ID所以要在后面帶入$row['id'])
這時候的代碼為
<?php function getList($pid=0){ $sql="SELECT*FROM deepcate WHERE pid = $pid"; $res = mysql_query($sql); $result=array(); while ($row = mysql_fetch_assoc($res)){ $result[]=$row; } return $result; } ?>
遞歸在操作是需要返回數(shù)組,我們使用引用的方法,對代碼進(jìn)行更改
<?php include ("conn.php"); function getList($pid=0,&$result=array()){ $sql="SELECT*FROM deepcate WHERE pid = $pid"; $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)){ $result[]=$row; getList($row['id'],$result); } return $result; } ?>
接下來對分類的樣式進(jìn)行美化
<?php include ("conn.php"); function getList($pid=0,&$result=array(),$space=0){ $space=$space+2; $sql="SELECT*FROM deepcate WHERE pid = $pid"; $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)){ $row['catename']=str_repeat(' ',$space).'|--|'.$row['catename']; $result[]=$row; getList($row['id'],$result,$space); } return $result; } $rs=getList(); print_r($rs); ?>
打印出來進(jìn)行觀察。
本章重點
遞歸實現(xiàn)無限級分類是用利用遞歸方式,找出父節(jié)點,生成一個家譜樹。
子類與父類。