PHP函数,有点帮助

时间:2009-12-25 17:33:42

标签: php

我需要一个功能,可以在目录中搜索UP到5个文件(目录中只有MAX 5个文件)。这些文件几乎具有相同的名称,ID为'_1' file'_2'file 2 filename = id.'_1.jpg'; // File 1. 等。它只是以下划线结尾,然后是文件-nr。例如:

a file1, and file3, BUT NO file2, then rename file3 to file2.

这是一个棘手的部分,仔细阅读:现在我需要搜索这个目录,如果有(例如)'_1.jpg' and '_3.jpg' and '_4.jpg'

换句话说,我需要找到名称之间的“间隙”并重命名所有文件,使它们按顺序排列,没有“间隙”。

另一个例子,如果dir包含3个以'_1.jpg' and '_2.jpg' and '_3.jpg'结尾的文件,我希望它重命名这些文件,使它们为{{1}},它们按顺序排列......

正如我所说,此文件夹中最多有5个文件。

请帮帮我......我在用PHP编写函数方面不是很好... 感谢

PS:如果我不清楚,请告诉我,我会再提供一些例子......

2 个答案:

答案 0 :(得分:1)

这不一定是最优雅的解决方案,但它可能会让你开始。

function shuffleFiles($dirPath,$basename, $extension)
{
   $MAXFILES = 5;
   $originalFilenames = array();
   for($i = 1; $i <= $MAXFILES; $i++) // one-based
   {
     $name = $dirPath . '/' . $basename . '_' . $i . '.' . $extension;
     if(file_exists($name))
     {
        $originalFilenames[] = $name;
     }
   }
   $i = 0;
   foreach($originalFilenames as $oldname)
   {
      $i++;
      $newname = $dirPath . '/' . $basename . '_' . $i . '.' . $extension;
      rename($oldname, $newname);
   }     
}

答案 1 :(得分:0)

适用于每个目录的任意数量的文件

function cleanUpMess($dir, $ext, $delimiter) {

  $files = glob($dir.'/*.'.$ext);
  $c = 1;

  foreach ($files as $file) {

    $secondPart = strrchr($file, $delimiter);
    $name = explode($secondPart, $file);
    $name = $name[0];

    $newFile = $name.$delimiter.$i.'.'.$ext;
    rename($file, $new);
    $c++;

  }

}