- 相关推荐
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读取文件的正确方法09-02
PHP递归效率分析08-25
php读取文件内容的方法09-14
php在线解压ZIP文件的方法07-31