本文目錄一覽:
- 1、PHP遍歷輸出文件夾內的所有文件用遞歸演算法?
- 2、PHP遞歸無限分類的 如何統計總條數 以及對顯示的結果進行分頁?比如設置為每頁顯示10個 。
- 3、php如何實現遞歸遍歷文件目錄
- 4、php 遞歸問題,想要將數據按照無限極分類的樣式顯示出來
- 5、PHP關於通過遞歸函數顯示所有分類的問題
PHP遍歷輸出文件夾內的所有文件用遞歸演算法?
一般來說,類似這種遍歷輸出所有文件,大多採用遞歸演算法,這樣程序顯得比較簡潔,其實際執行效率來說,並不見得比其他方法更好。
以下是示例:
function file_list($path)
{
if ($handle = opendir($path))//打開路徑成功
{
while (false !== ($file = readdir($handle)))//循環讀取目錄中的文件名並賦值給$file
{
if ($file != “.” $file != “..”)//排除當前路徑和前一路徑
{
if (is_dir($path.”/”.$file))
{
// echo $path.”: “.$file.”br”;//去掉此行顯示的是所有的非目錄文件
file_list($path.”/”.$file);
}
else
{
echo $path.”: “.$file.”br”;
}
}
}
}
}
PHP遞歸無限分類的 如何統計總條數 以及對顯示的結果進行分頁?比如設置為每頁顯示10個 。
每個節點都要記錄子節點的數量c。每新增一個節點都要對各父和祖節點的子節點計數加1。這樣根節點會有總數的記錄。
這樣遞歸遍歷時也可以根據子節點數量c的來確定讀取的數量限制。比如 讀取條數計數10 就繼續遞歸
在每個節點的表上 增加子節點的id集或計數,增加根節點到父節點路徑,會方便這些操作。
php如何實現遞歸遍歷文件目錄
只需要一個遞歸函數:
function Folders($folder) {
if (!is_dir($folder)) return false;
foreach (scandir($folder) AS $f) {
if ($f == ‘.’ or $f == ‘..’) continue;
echo $f, ‘hr/’;
Folders($folder . ‘/’ . $f); // 遞歸調用
}
}
Folders(‘Test’);
php 遞歸問題,想要將數據按照無限極分類的樣式顯示出來
首先 將json 解碼成數組, 用json_decode 函數 注意 一定要加上第二個參數 否則他會返回一個對象。接下來就是地遞歸了。這是一個最簡單的遞歸只要逐個遍歷即可。
下面是完整的代碼:
$data= json_decode($str,true);
$options = getChildren($data);
function getChildren($parent,$deep=0) {
foreach($parent as $row) {
$data[] = array(“id”=$row[‘id’], “name”=$row[‘name’],”pid”=$row[‘parentid’],’deep’=$deep);
if ($row[‘childs’]) {
$data = array_merge($data, getChildren($row[‘childs’], $deep+1));
}
}
return $data;
}
?
select name=”” id=””
?php foreach ($options as $row) { ?
option value=”?php echo $row[‘id’] ?”?php echo str_pad(“”,$row[‘deep’]*3, “-“,STR_PAD_RIGHT); ??php echo $row[‘name’]; ?/option
?php } ?
/select
以上代碼已測試通過 效果圖如下
PHP關於通過遞歸函數顯示所有分類的問題
首先需要搞明白你的資料庫結構,你的檔案類別資料庫表 dangan_class 是不是三欄位:id、name、f_id,其中id為主鍵,f_id為自關聯的外鍵,表示上一分類,0表示最上級分類,對不對?
樹狀枚舉出所有類別的代碼可以這樣:
?php
function zilei($fid,$level){
$sql=”select id,name from dangan_class where f_id=$fid”;
$query=mysql_query($sql);
while(list($id,$name)=mysql_fetch_array($query)){
echo str_repeat(“==”,$level),$name,”a href=’?del=$id’刪除/abr\n”;
zilei($id,$level+1);
}
mysql_free_result($query);
}
zilei(0,0);
?
為了結構簡單,我上面只做了刪除的代碼,修改的部分你自行加上,你也可以先調試好了刪除的代碼再加。
代碼裡面的==是為了縮進,你可以換為全形的空白,或者其它符號。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/246084.html