- 相關推薦
php遞歸遍歷刪除文件的方法
文章主要介紹了php遞歸遍歷刪除文件的方法,涉及php遍歷文件操作的相關技巧,非常具有實用價值,需要的朋友可以參考下.
本文實例講述了php遞歸遍歷刪除文件的方法。分享給大家供大家參考。具體如下:
這個函數稍加修改就可以變成一個遞歸文件拷貝函數
?
1
2
3
4
5
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
function mover($src,$dst) {
$handle=opendir($src);
// Opens source dir.
if (!is_dir($dst)) mkdir($dst,0755);
// Make dest dir.
while ($file = readdir($handle)) {
if (($file!=".") and ($file!="..")) {
// Skips . and .. dirs
$srcm=$src."/".$file;
$dstm=$dst."/".$file;
if (is_dir($srcm)) {
// If another dir is found
mover($srcm,$dstm);
// calls itself - recursive WTG
} else {
copy($srcm,$dstm);
unlink($srcm);
// Is just a copy procedure is needed
} // comment out this line
}
}
closedir($handle);
rmdir($src);
}
?>
希望本文所述對大家的php程序設計有所幫助。
【拓展閱讀】
算法原理
如果用P表示n個元素的全排列,而Pi表示n個元素中不包含元素i的全排列,(i)Pi表示在排列Pi前面加上前綴i的排列,那么n個元素的全排列可遞歸定義為:
、 如果n=1,則排列P只有一個元素i;
、 如果n>1,則全排列P由排列(i)Pi構成;
根據定義,可以看出如果已經生成(k-1)個元素的排列Pi,那么k個元素的排列可以在每個Pi前面加上元素i而生成。
代碼實現
復制代碼 代碼如下:
function rank($base, $temp=null)
{
$len = strlen($base);
if($len <= 1)
{
echo $temp.$base.'<br/>';
}
else
{
for($i=0; $i< $len; ++$i)
{
rank(substr($base, 0, $i).substr($base, $i+1, $len-$i-1), $temp.$base[$i]);
}
}
}
rank('123');
不過,經多次測試運行結果,發現存在一個問題:若是存在相同的元素,則全排列有重復。
例如'122'的全排列只有三種情況:'122'、'212'、'221';上面方法卻有重復。
略修改,加個判斷重復的標志,解決了問題(代碼如下):
復制代碼 代碼如下:
function fsRank($base, $temp=null)
{
static $ret = array();
$len = strlen($base);
if($len <= 1)
{
//echo $temp.$base.'<br/>';
$ret[] = $temp.$base;
}
else
{
for($i=0; $i< $len; ++$i)
{
$had_flag = false;
for($j=0; $j<$i; ++$j)
{
if($base[$i] == $base[$j])
{
$had_flag = true;
break;
}
}
if($had_flag)
{
continue;
}
fsRank(substr($base, 0, $i).substr($base, $i+1, $len-$i-1), $temp.$base[$i]);
}
}
return $ret;
}
print '<pre>';
print_r(fsRank('122'));
print '</pre>';
【php遞歸遍歷刪除文件的方法】相關文章:
php遞歸遍歷多維數組的方法10-06
PHP遍歷目錄文件常用方法09-23
php遞歸創建和刪除文件夾的代碼09-21
用php自定義函數之遞歸刪除文件及目錄09-13
PHP使用遞歸算法無限遍歷數組示例05-20
用PHP遍歷目錄下的全部文件06-13
php遍歷數組的方法分享07-13
php遍歷替換目錄下文件指定內容08-22
php讀取文件內容的方法09-14