PHP重命名会顺序删除某些文件

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/

我试图让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++;
}

谢谢大家!

尝试在循环之外设置数组,并对其进行排序,这样它将按照不会留下任何空白的顺序对其进行解析:

$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++;
  }
    ?>

这是因为在循环过程中会有一个偏移量,该偏移量已经用作文件名,因此会替换该文件。