#遞歸實現無線分類php
##1.兩種使用場景mysql
分類下拉類表主要使用在後臺添加商品或者文章界面選擇分類的時候。sql
db數據庫
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for catedeep -- ---------------------------- DROP TABLE IF EXISTS `catedeep`; CREATE TABLE `catedeep` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pid` int(11) NOT NULL DEFAULT '0' COMMENT '父級ID', `catename` varchar(25) DEFAULT NULL COMMENT '分類名稱', `order` int(11) DEFAULT '100' COMMENT '排序', `createtime` datetime NOT NULL, `updatetime` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
connect數組
$db_host="localhost"; $db_user="root"; $db_password="root"; $db_name="test"; $con=mysql_connect($db_host,$db_name,$db_password)or die(mysql_error()); mysql_select_db($db_name,$con)or die(mysql_error()); mysql_query("set names utf8")or die("編碼設置錯誤");
code函數
/** * [combobox description] * @param integer $pid [父級id根節點爲0] * @param array &$result [遞歸保存的數組,以參數引用的方式傳遞] * @param integer $spac [縮進體現的數量] * @return [type] [description] */ function combobox($pid=0,&$result=array(),$spac=0){ $spac=$spac+2; $sql="select * from deepcate where pid=$pid"; $res=mysql_query($sql);//結果集 while($row=mysql_fetch_assoc($res)){//首先讀書一級分類,得到一級的id並把它做爲下一次遞歸的條件去找子集 $row['catename']=str_repeat(" ",$spac).$row['catename']; $result[]=$row;//數據保存數組 combobox($row['id'],$result,$spac); //找個一個分類的全部再找下一個分類 } return $result; }
核心關鍵點就是查詢where pid=id(父級ID),可不能夠一次查出全部須要的數據再循環遍歷呢oop
<?php $db_host="localhost"; $db_user="root"; $db_password="root"; $db_name="deeploop"; $con=mysqli_connect($db_host,$db_user,$db_password,$db_name); mysqli_query($con,"set names utf8"); /** * [combobox description] * @param integer $pid [父級id根節點爲0] * @param array &$result [遞歸保存的數組,以參數引用的方式傳遞] * @param integer $spac [縮進體現的數量] * @return [type] [description] */ function combobox($pid=0,&$result=array(),$spac=0){ global $con; $spac=$spac+2; $sql="select * from catedeep where pid=$pid"; $res=mysqli_query($con ,$sql);//結果集 while($row=mysqli_fetch_assoc($res)){//首先讀書一級分類,得到一級的id並把它做爲下一次遞歸的條件去找子集 $row['catename']=str_repeat(" ",$spac).$row['catename']; $result[]=$row;//數據保存數組 combobox($row['id'],$result,$spac); //找個一個分類的全部再找下一個分類 } return $result; } $res=combobox(); echo "<pre/>"; print_r($res); ?>
寫一個試圖ui 穿參數設置默認選中誰(編輯的時候的)fetch
##3.麪包屑導航實現ui
麪包屑導航在前臺顯示路勁或者所屬分類的時候用到編碼
code
<?php $db_host="localhost"; $db_user="root"; $db_password="root"; $db_name="deeploop"; $con=mysqli_connect($db_host,$db_user,$db_password,$db_name); mysqli_query($con,"set names utf8"); /** * [combobox description] * @param integer $pid [父級id根節點爲0] * @param array &$result [遞歸保存的數組,以參數引用的方式傳遞] * @param integer $spac [縮進體現的數量] * @return [type] [description] */ function breadcrumbs($id,&$result=array()){ global $con; $sql="select * from catedeep where id=$id"; $res=mysqli_query($con ,$sql);//結果集 $row=mysqli_fetch_assoc($res);//找到一條分類記錄,找到記錄中的中的pid做爲下一查詢的條件 if($row){ $result[]=$row; breadcrumbs($row['pid'],$result); } echo 11; krsort($result); return $result; } $res=breadcrumbs(6); echo "<pre/>"; print_r($res); ?>
在方法中查詢數據庫好很差呢?
krsort()
str_reapeat()