我正在尝试让PHP按顺序重命名目录中的文件列表(1.jpg,2.jpg等)。每次大约20个文件。通常会丢失一个数字(如13.jpg,因此所有内容都需要重新编号。)这就是我需要的脚本。以下是我的工作,除了每次删除图像2-9.jpg。因此,如果文件夹中有19个文件,我运行脚本,然后有1.jpg和10-18.jpg。真的很奇怪?这可以解决吗?是否可能与覆盖相同的文件名有关?虽然在10.jpg之后它很好用但很奇怪......
$i=1;
foreach (array_filter(glob("../images/gallery/10/*") ,"is_file") as $f){
rename($f, "../images/gallery/10/".$i.".jpg");
$i++;
}
谢谢!
答案 0 :(得分:0)
尝试设置循环的数组OUTSIDE和SORT IT,因此它将按照不会留下任何空白的顺序对其进行解析:
$i=0;
$array = array_filter(glob("../images/gallery/10/*") ,"is_file")
sort($array); // See which type of sort is needed here
foreach ($array as $f){
rename($f, "../images/gallery/10/". ++$i .".jpg");
}
无论如何,避免在循环语句中使用函数,因为它将被重新评估。
答案 1 :(得分:0)
$i=1;
foreach (array_filter(glob("../images/gallery/10/*") ,"is_file") as $f){
if (!file_exists("../images/gallery/10/".$i.".jpg)){
rename($f, "../images/gallery/10/".$i.".jpg");
}
$i++;
}
答案 2 :(得分:0)
感谢您的所有答案!我能够解决它 - 问题与排序有关。我发现PHP看到列表排序错误的方式,如1.jpg,10.jpg,11.jpg等。以下代码修复了它 - 它现在很好用:
<?php
function getFiles(){
$files=array();
if($dir=opendir("../images/gallery/10/")){
while($file=readdir($dir)){
if($file!='.' && $file!='..' && $file!=basename(__FILE__)){
$files[]=$file;
}
}
closedir($dir);
}
natsort($files); //sort
return $files;
}
$i=1;
foreach(getFiles() as $f){
rename("../images/gallery/10/".$f, "../images/gallery/10/".$i.".jpg");
$i++;
}
?>