我有以下文件:
1.jpg
2.jpg
3.jpg
4.jpg
当我删除2.jpg
时,我希望3.jpg
成为2.jpg
而4.jpg
成为3.jpg
我尝试使用rename
函数进行for循环,但它似乎不起作用:
for($a = $i;$a < $filecount;$a ++)
{
rename('photo/'.($a+1).'.jpg', 'photo/'. ($a).'.jpg');
}
$i
是我刚刚删除的照片编号。
答案 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;