我需要一个功能,可以在目录中搜索UP到5个文件(目录中只有MAX 5个文件)。这些文件几乎具有相同的名称,ID为'_1'
file
为'_2'
,file 2
为 filename = id.'_1.jpg'; // File 1.
等。它只是以下划线结尾,然后是文件-nr。例如:
a file1, and file3, BUT NO file2, then rename file3 to file2.
这是一个棘手的部分,仔细阅读:现在我需要搜索这个目录,如果有(例如)'_1.jpg' and '_3.jpg' and '_4.jpg'
换句话说,我需要找到名称之间的“间隙”并重命名所有文件,使它们按顺序排列,没有“间隙”。
另一个例子,如果dir包含3个以'_1.jpg' and '_2.jpg' and '_3.jpg'
结尾的文件,我希望它重命名这些文件,使它们为{{1}},它们按顺序排列......
正如我所说,此文件夹中最多有5个文件。
请帮帮我......我在用PHP编写函数方面不是很好... 感谢
PS:如果我不清楚,请告诉我,我会再提供一些例子......答案 0 :(得分:1)
这不一定是最优雅的解决方案,但它可能会让你开始。
function shuffleFiles($dirPath,$basename, $extension)
{
$MAXFILES = 5;
$originalFilenames = array();
for($i = 1; $i <= $MAXFILES; $i++) // one-based
{
$name = $dirPath . '/' . $basename . '_' . $i . '.' . $extension;
if(file_exists($name))
{
$originalFilenames[] = $name;
}
}
$i = 0;
foreach($originalFilenames as $oldname)
{
$i++;
$newname = $dirPath . '/' . $basename . '_' . $i . '.' . $extension;
rename($oldname, $newname);
}
}
答案 1 :(得分:0)
适用于每个目录的任意数量的文件
function cleanUpMess($dir, $ext, $delimiter) {
$files = glob($dir.'/*.'.$ext);
$c = 1;
foreach ($files as $file) {
$secondPart = strrchr($file, $delimiter);
$name = explode($secondPart, $file);
$name = $name[0];
$newFile = $name.$delimiter.$i.'.'.$ext;
rename($file, $new);
$c++;
}
}