最近在幫客戶開發模組需要寫一個分類功能,之前都是用while迴圈去解,每解一層分類資料就要加一個while迴圈,然後用陣列輸出,這方法雖然好用簡單,但如果分類層級到4級5級,那不就要while回圈4~5次,整個程式會很龐大而且不易維護,所以想說乾脆用遞回來解算了,寫了一個範例請大家參考看看,程式真的精簡很多了,看了也舒服。
假設要解這樣多階層的資料表
方法如下:
1、先在模組的function.php中增加$xoopsDB ->fetchArray($result)迴圈程式,這樣輸入值就能以陣列方式吧全部資料都打包出來。
//查詢資料表while全部數值
function databasetablewhile($dbneme="",$where=""){
global $xoopsDB;
$sql = "select * from " . $xoopsDB->prefix($dbneme) . " ".$where."";
$result = $xoopsDB -> query($sql);
$i=1;
while($keyword= $xoopsDB ->fetchArray($result)){
$keywordArr[$i]=$keyword;
$i++;
};
return $keywordArr;
}
2、在需要顯示內容的php檔案呼叫databasetablewhile函數並給予值參
3、以下為遞回程式,以遞回方法解出neilshopsort資料表中並按照階層排列
//遞回開始
function retorted($dbneme="",$sortid=""){
$where=" where `of_sortid` = '".$sortid."' order by sortidsort DESC"; //where數值
$sortArr=databasetablewhile($dbneme,$where);
foreach($sortArr as $key=> $val){
$sortvar.=$sortArr[$key]['sorttitle']."<br />";
$sortvar.=retorted($dbneme,$sortid="".$sortArr[$key]['sortid']."");
}
return $sortvar;
}
foreach($sort as $key=> $val){
$sortvar.=$sort[$key]['sorttitle']."<br />";
$sortvar.=retorted($dbneme,$sortid="".$sort[$key]['sortid']."");
$sortvar.="<br />";
}
//輸出結果
echo $sortvar;
假設要解這樣多階層的資料表
方法如下:
1、先在模組的function.php中增加$xoopsDB ->fetchArray($result)迴圈程式,這樣輸入值就能以陣列方式吧全部資料都打包出來。
//查詢資料表while全部數值
function databasetablewhile($dbneme="",$where=""){
global $xoopsDB;
$sql = "select * from " . $xoopsDB->prefix($dbneme) . " ".$where."";
$result = $xoopsDB -> query($sql);
$i=1;
while($keyword= $xoopsDB ->fetchArray($result)){
$keywordArr[$i]=$keyword;
$i++;
};
return $keywordArr;
}
2、在需要顯示內容的php檔案呼叫databasetablewhile函數並給予值參
$dbneme="neilshopsort"; //資料表名稱
$where=" where `of_sortid` = '0' order by sortidsort DESC"; //where數值
$sort=databasetablewhile($dbneme,$where);
3、以下為遞回程式,以遞回方法解出neilshopsort資料表中並按照階層排列
function retorted($dbneme="",$sortid=""){
$where=" where `of_sortid` = '".$sortid."' order by sortidsort DESC"; //where數值
$sortArr=databasetablewhile($dbneme,$where);
foreach($sortArr as $key=> $val){
$sortvar.=$sortArr[$key]['sorttitle']."<br />";
$sortvar.=retorted($dbneme,$sortid="".$sortArr[$key]['sortid']."");
}
return $sortvar;
}
foreach($sort as $key=> $val){
$sortvar.=$sort[$key]['sorttitle']."<br />";
$sortvar.=retorted($dbneme,$sortid="".$sort[$key]['sortid']."");
$sortvar.="<br />";
}
//輸出結果
echo $sortvar;
實際看一下結果:
的確都有吧資料按照階層排列解出來(4階),一個都沒少,之後再吧解出來數值套入到UI介面的table表格中,這部分就不再詳述,按照範例延伸開發即可。
教學撰寫:徐嘉裕 Neil hsu
留言
張貼留言