PHP重命名会顺序删除某些文件
我试图让PHP按照1.jpg、2.jpg等顺序重命名目录中的文件列表。。每次大约20个文件。通常缺少一个数字,比如13.jpg,所以所有的东西都需要重新编号。这就是我需要脚本的原因。下面是我的作品,除了每次删除图片2-9.jpg。因此,如果文件夹中有19个文件,我运行脚本,然后是1.jpg和10-18.jpg。真的很奇怪?这能修好吗?这可能与覆盖相同的文件名有关吗?奇怪的是,在10.jpg之后,它工作得很好PHP重命名会顺序删除某些文件,php,rename,sequential,Php,Rename,Sequential,我试图让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/
$i=1;
foreach (array_filter(glob("../images/gallery/10/*") ,"is_file") as $f){
rename($f, "../images/gallery/10/".$i.".jpg");
$i++;
}
谢谢大家! 尝试在循环之外设置数组,并对其进行排序,这样它将按照不会留下任何空白的顺序对其进行解析:
$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");
}
无论如何,避免在循环语句中使用函数,因为它将被重新计算,而不会产生任何结果。谢谢您的回答!我能够解决这个问题——这个问题与排序有关。我发现PHP将列表按错误的方式排序,如1.jpg、10.jpg、11.jpg等。下面的代码修复了它—现在它工作得很好:
$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++;
}
<?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++;
}
?>
这是因为在循环过程中会有一个偏移量,该偏移量已经用作文件名,因此会替换该文件。