至於添加刪除之類的功能我就不多寫了!仔細看看就知道這麼用了. 難的是顯示方面 希望高手擴充一下! 這是類別
程式碼如下:
<?php /*======================================================== 类名:catalog 功能:无限分级类 方法: 树形显示分类 catalog_show($id) //参数$id 递归调用 流程:找到父分类为0所有根分类-> 一直递归取得所有分类并显示 添加分类 catalog_add($uid,$name) //$uid 父id //$name 分类名 流程:依据$uid,在此id下添加一个新子id 删除分类 catalog_del($uid)//参数 $uid 数要删除的分类 修改分类 catalog_set($id,$name) //参数 $id 要修改的分类 //参数 $name 新的分类名 变量: $config //数据库信息-> host,user,pass,dbname $catalog_dbname //分类数据库名 数据库: catalog_id //分类的自然序号 catalog_uid //分类的父分类 catalog_name //分类名 catalog_path_number //亲缘树数字形式 0:1:2 catalog_path_char //亲缘树字符形式 分类1:分类1.1:分类1.1.1 ========================================================*/ class catalog{ var $config; var $catalog_dbname; var $links; private function connect(){ $this->links = mysql_connect($this->config['host'],$this->config['user'],$this->config['pass']) or die("错误: 第".LINE."行<br>".mysql_error()); mysql_select_db($this->config['dbname'],$this->links); mysql_query("SET NAMES gb2312"); } function catalog_show($uid = 0){ $this->connect(); $sql = "Select * FROM ".$this->catalog_dbname. " Where catalog_uid = ". $uid ." orDER BY catalog_id "; $result = mysql_query($sql,$this->links) or die("错误: 第".LINE."行<br>".mysql_error()); if(mysql_num_rows($result) > 0){ while ($row = mysql_fetch_assoc($result)){ if($this->sun_catalog($row['catalog_id'])){//判断有没有子分类 $cata_img = "<img id = 'img".$row['catalog_id']."' src='./img/last_node.jpg' ōnclick='click_catalog(".$row['catalog_id'].")'/>"; }else{ $cata_img = "<img src='./img/sp.jpg'/>"; } $path = explode(":",$row['catalog_path_number']); if(count($path) > 1){ for($i=1;$i<count($path);$i++){ $path_img .= "<img src='./img/sp.jpg'/>"; } } echo $path_img.$cata_img; echo "<a class='menu' href = 'javascrīpt:send_id(".$row['catalog_id'].")'>"; echo $row['catalog_name']."</a><br>"; $path_img = ""; if($this->sun_catalog($row['catalog_id'])){ $hidden_p = "style='display:none'"; echo "<p id = 'p".$row['catalog_id']."' ".$hidden_p.">"; $this->catalog_show($row['catalog_id']); echo "</p>"; } } } } private function sun_catalog($uid){//判断是否有子分类 $sql = "Select * FROM ".$this->catalog_dbname. " Where catalog_uid = ". $uid ." orDER BY catalog_id "; $result = mysql_query($sql,$this->links) or die("错误: 第".LINE."行<br>".mysql_error()); if(mysql_num_rows($result) > 0){ return true; }else{ return false; } } function catalog_add($uid,$name){ //获取父id的亲缘树 $this->connect(); $sql = "Select * FROM ".$this->catalog_dbname." Where catalog_id = '".$uid."'"; $result = mysql_query($sql,$this->links) or die("错误: 第".LINE."行<br>".mysql_error()); $row = mysql_fetch_assoc($result); $fid_path_number = $row['catalog_path_number'];//id的数字亲缘树 $fid_path_char = $row['catalog_path_char'];//id的字符亲缘树 //插入数据 先插入行->再找到最新插入的id, 在依据这个id进行修改 $sql = "Insert INTO ".$this->catalog_dbname."(catalog_uid,catalog_name) VALUES(".$uid.",'".$name."')"; $result = mysql_query($sql,$this->links) or die("错误: 第".LINE."行<br>".mysql_error()); $catalog_id = mysql_insert_id();//获取自己的id $catalog_path_number = $fid_path_number.":".$catalog_id;//得到自己的数字亲缘数 $catalog_path_char = $fid_path_char.":".$name;//得到自己的字符亲缘数 $sql = "Update '".$this->catalog_dbname."' SET catalog_path_number = '".$catalog_path_number."', catalog_path_char = '".$catalog_path_char."' Where catalog_id = ".$catalog_id; mysql_query($sql,$this->links) or die("错误: 第".LINE."行<br>".mysql_error()); } function catalog_del($id){ $this->connect(); $sql = "Delete FROM ".$this->catalog_dbname." Where catalog_id = ".$id; mysql_query($sql,$this->links) or die("错误: 第".LINE."行<br>".mysql_error()); } function catalog_set($id,$name){ $this->connect(); $sql = "Update ".$this->catalog_dbname." SET catalog_name = '".$name."' Where catalog_id = ".$id; mysql_query($sql,$this->links) or die("错误: 第".LINE."行<br>".mysql_error()); } } ?>
下面主要介紹了php無限極分類遞歸排序實現方法,透過一個簡單的遞歸函數實現無限遞歸分類排序,是非常實用的技巧,需要的朋友可以參考下
function order ($array,$pid=0){ $arr = array(); foreach($array as $v){ if($v['pid']==$pid){ $arr[] = $v; $arr = array_merge($arr,order($array,$v['id'])); } } return $arr; }
以上是php 無限極分類以及使用遞歸實現的排序方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!