<?phpglobal $mysqli; global $count;$count=0; $mysqli = new MySQLi("localhost","root","","bbs"); $mysqli->set_charset("utf8");/*資料庫資訊 表名: category+-----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-----------+-------------+------+-----+---------+----------------+| cat_id | int(10) | NO | PRI | NULL | auto_increment || name | varchar(50) | NO | | NULL | || parent_id | int(10) | NO | | NULL | |+-----------+-------------+------+-----+---------+----------------+SQL 陳述式查詢出來所以 parent_id=0 的資訊, parent_id =0 表明這個一個最高分類,下面還可能有好多個 子分類*/ $sql ="select * from category where parent_id=0"; $result =$mysqli->query($sql); $cat_arr =array(); while($row =$result->fetch_assoc()) { $cat_arr[$row['cat_id']]['id']=$row['cat_id'];$cat_arr[$row['cat_id']]['name']=$row['name'];$cat_arr[$row['cat_id']]['parent_id']=$row['parent_id'];/*將查詢出來的一個資訊都儲存在 $cat_arr 中,如果這個資訊的存在,就去尋找 以這個資訊的 cat_id 為 parent_id 的所有的資訊,而這個任務則去交給了getChild() 方法去完成,將得到的所有的子分類都以 $cat_arr['cat_id']['child']為索引添加到數組裡面去.在得到的數組中,每一行包含了 cat_id , name parent_id 三個欄位,這是所有行都包含的而如果這一行 中的 child 欄位不為空白的話,那麼就說明以這個 cat_id ,其還有子分類 ,那麼就要遞規調用裡面所有的子分類*/if(isset($row['cat_id'])!=NULL){$cat_arr[$row['cat_id']]['child']=getChild($row['cat_id']);}}foreach($cat_arr as $value){//var_dump ($value['name']);echo $value['name']."</br>";//var_dump($value['cat_id']);listcat($value['child'],2);/*foreach($value['cat_id'] as $v){var_dump($v['name']);}*/}function listcat($array,$level){if(!empty($array)){foreach($array as $value){//var_dump($value['cat_id']);echo getLevel($level);echo $value['name']."</br>";listcat($value['child'],$level+2);}}} /* 使各類別顯示出來各級關係,所以在每個子級分類顯示前加入空格 */ function getlevel($level) { $str=NULL; for($i=0;$i<$level;$i++) { $str.=" "; } $str.="|--"; return $str; }function getChild($id){global $mysqli;$sql ="select * from category where parent_id=".$id;$result =$mysqli->query($sql); $cat_arr=array();while($row = $result->fetch_assoc()){$cat_arr[$row['cat_id']]['id']=$row['cat_id'];$cat_arr[$row['cat_id']]['name']=$row['name'];$cat_arr[$row['cat_id']]['parent_id']=$row['parent_id'];if(isset($row['cat_id'])!=NULL){$cat_arr[$row['cat_id']]['child']=getChild($row['cat_id']);}}return $cat_arr;}/*運行效果教育|--大學|--南陽理工|--電腦系|--中學|--小學衣服|--帽子|--襯衫|--鞋子|--耐克*/?>