2011-09-12 2 views
3

У меня есть следующие файлы:Переименовать все файлы в порядке, в PHP

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

Когда я удалить 2.jpg, я хочу 3.jpg стать 2.jpg и 4.jpg стать 3.jpg

Я попробовал цикл с rename функция, но это не похоже на работу:

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

Где $i - номер фотографии, которую я только что удалил.

+0

Почему он не работает? – TJHeuvel

+0

Это не переименование ничего. –

+0

Вы хотите удалить их, а затем попытаться переименовать их? Вы не можете удалить фотографию в первую очередь, вам просто нужно переименовать ее? Что вы удаляете? – b01

ответ

4

список всех файлов, отсортированных по названию:

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

Foreach файл, переименовать его, если это необходимо:

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

где * - путь к папке? не могли бы вы добавить описание ?. –

+0

Вы оба должны посмотреть на это: http://php.net/manual/en/function.glob.php –

+0

'*' означает * все файлы в текущей папке * – arnaud576875

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); 
    } 
?> 

Таким образом, вы всегда уверены, что последовательность правильная. Если у вас много файлов, вы можете начать переименование с номера файла, который вы удаляете.

-1
$filecount = 5; 
$i = 2; 

unlink('photo/'. $i . '.jpg'); 
for($i; $i < $filecount; $i++) { 
    rename('photo/'. ($i+1) .'.jpg', 'photo/'. $i . '.jpg'); 
} 
die; 
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')); 

это кажется рудиментарные, но это работает, и легко читается.

Смежные вопросы