首頁 > 後端開發 > php教程 > php 無限極分類以及使用遞歸實現的排序方法

php 無限極分類以及使用遞歸實現的排序方法

怪我咯
發布: 2023-03-13 11:52:01
原創
1559 人瀏覽過

至於添加刪除之類的功能我就不多寫了!仔細看看就知道這麼用了. 難的是顯示方面 希望高手擴充一下! 這是類別

 程式碼如下:

<?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[&#39;host&#39;],$this->config[&#39;user&#39;],$this->config[&#39;pass&#39;]) or die("错误: 第".LINE."行<br>".mysql_error()); 
mysql_select_db($this->config[&#39;dbname&#39;],$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[&#39;catalog_id&#39;])){//判断有没有子分类 
$cata_img = "<img id = &#39;img".$row[&#39;catalog_id&#39;]."&#39; src=&#39;./img/last_node.jpg&#39; ōnclick=&#39;click_catalog(".$row[&#39;catalog_id&#39;].")&#39;/>"; 
}else{ 
$cata_img = "<img src=&#39;./img/sp.jpg&#39;/>"; 
} 
$path = explode(":",$row[&#39;catalog_path_number&#39;]); 
if(count($path) > 1){ 
for($i=1;$i<count($path);$i++){ 
$path_img .= "<img src=&#39;./img/sp.jpg&#39;/>"; 
} 
} 
echo $path_img.$cata_img; 
echo "<a class=&#39;menu&#39; href = &#39;javascrīpt:send_id(".$row[&#39;catalog_id&#39;].")&#39;>"; 
echo $row[&#39;catalog_name&#39;]."</a><br>"; 
$path_img = ""; 
if($this->sun_catalog($row[&#39;catalog_id&#39;])){   
$hidden_p = "style=&#39;display:none&#39;";   
echo "<p id = &#39;p".$row[&#39;catalog_id&#39;]."&#39; ".$hidden_p.">";   
$this->catalog_show($row[&#39;catalog_id&#39;]); 
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 = &#39;".$uid."&#39;"; 
$result = mysql_query($sql,$this->links) 
or die("错误: 第".LINE."行<br>".mysql_error()); 
$row = mysql_fetch_assoc($result); 
$fid_path_number = $row[&#39;catalog_path_number&#39;];//id的数字亲缘树 
$fid_path_char = $row[&#39;catalog_path_char&#39;];//id的字符亲缘树 
//插入数据 先插入行->再找到最新插入的id, 在依据这个id进行修改 
$sql = "Insert INTO ".$this->catalog_dbname."(catalog_uid,catalog_name) 
VALUES(".$uid.",&#39;".$name."&#39;)"; 
$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 &#39;".$this->catalog_dbname."&#39; 
SET 
catalog_path_number = &#39;".$catalog_path_number."&#39;, 
catalog_path_char = &#39;".$catalog_path_char."&#39; 
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 = &#39;".$name."&#39; 
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[&#39;pid&#39;]==$pid){
            $arr[] = $v;
            $arr = array_merge($arr,order($array,$v[&#39;id&#39;]));
        }
    }
    return $arr;
}
登入後複製

以上是php 無限極分類以及使用遞歸實現的排序方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板