在PHP中按顺序重命名所有文件

时间:2011-09-12 13:25:52

标签: php

我有以下文件:

1.jpg
2.jpg
3.jpg
4.jpg

当我删除2.jpg时,我希望3.jpg成为2.jpg4.jpg成为3.jpg

我尝试使用rename函数进行for循环,但它似乎不起作用:

for($a = $i;$a < $filecount;$a ++)
{
    rename('photo/'.($a+1).'.jpg', 'photo/'.   ($a).'.jpg');
}

$i是我刚刚删除的照片编号。

4 个答案:

答案 0 :(得分:4)

列出按名称排序的所有文件:

$files = glob('../photos/*');

Foreach文件,必要时重命名:

foreach($files as $i => $name) {
    $newname = sprintf('../photos/%d.jpg', $i+1);
    if ($newname != $name) {
        rename($name, $newname);
    }
}

答案 1 :(得分:0)

为什么不直接删除不再需要的文件,而是重命名保留在文件夹中的所有文件,从一个开始。像:

<?php
  $fileToRemove= '3.jpg';
  unlink($fileToRemove);

  $cnt = 0;
  if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            rename($file, ++$cnt+".jpg");
        }
    }
    closedir($handle);
  }
?>

这样,您始终确保序列正确。如果你有很多文件,你可以从你要删除的文件的编号开始重命名。

答案 2 :(得分:0)

我会这样做:

echo "<pre>";
$files = array('file1.jpg', 'file5.jpg', 'file7.jpg', 'file9.jpg');

function removeElement($array, $id){
    $clone = $array; // we clone the array for naming usage
    $return = array(); // the array returned for testing purposes
    $j = 0;
    foreach($array as $num => $file){ // loop in the elements
        if($file != $id){ // check if the current file is not the element we want to remove 
            if($num == $j){ // if current element and '$j' are the same we do not need to rename that file
                $return[] = "// @rename('".$file."', '".$file."'); -- do not rename";
            } else { // if previously we have removed the file '$id' then '$j' should be -1 and we rename the file with the next one stored in '$clone' array
                $return[] = "@rename('".$file."', '".$clone[($num-1)]."'); // rename";
            }
        } else { // this is for the file we need to remove, we also -1 current '$j'
            $j--;
        }
        $j++;
    }
    return $return;
}

print_r(removeElement($files, 'file5.jpg'));

它似乎很简陋,但它有效且易于阅读。

答案 3 :(得分:-1)

$filecount = 5;
$i = 2;

unlink('photo/'. $i . '.jpg');
for($i; $i < $filecount; $i++) {
    rename('photo/'. ($i+1) .'.jpg', 'photo/'. $i . '.jpg');
}
die;