在php中重命名多个文件,而不覆盖其中一个文件

在php中重命名多个文件,而不覆盖其中一个文件,php,directory,overriding,rename,filenames,Php,Directory,Overriding,Rename,Filenames,我的文件夹里有很多文件。我想重命名它们,但不想用另一个覆盖它们 假设这些是我的文件名: Ana.php Maria.php Ioana.php Georgiana.php Bianca.php 我得到一个数组,告诉我要重命名哪些文件: array( "Maria.php" => "Ioana.php", "Bianca.php" => "Cristina.php", "Ioana.php" => "Daniela.php" ) 这是一个Ioan

我的文件夹里有很多文件。我想重命名它们,但不想用另一个覆盖它们

假设这些是我的文件名:

  • Ana.php
  • Maria.php
  • Ioana.php
  • Georgiana.php
  • Bianca.php
我得到一个数组,告诉我要重命名哪些文件:

array(
    "Maria.php"  => "Ioana.php",
    "Bianca.php" => "Cristina.php",
    "Ioana.php"  => "Daniela.php"
)
这是一个
Ioana.php
被覆盖的示例。因为
Maria.php
想要这个名字

或者让我们举个例子:

array(
    "Maria.php"  => "Ioana.php",
    "Ioana.php"  => "Maria.php"
)
这是一个文件要切换名称的示例

我需要一个解决方案,无论应该重命名哪些文件,它们都不会覆盖文件夹中的另一个文件。应该重命名的文件数量每次都可能不同

我需要重命名所有数组文件。问题是如何做到这一点而不覆盖

文件名非常重要。添加时间戳后缀不是一个好的解决方案。

使用
文件存在($filename)
在重命名文件之前检查文件是否存在,如:

<?php
while(count($arr) > 0)
{
  foreach ($arr as &$value) {
    if (file_exists($value)) {
      rename($value,$value + "temp");

    }
    rename(array_search($value,$arr),$value);
    unset($tab[array_search($value, $arr)]);
  }
}
?>

您只需在阵列上循环,直到所有已重命名的文件都存在为止。

在重命名文件之前,请使用
文件($filename)
检查文件是否存在,如:

<?php
while(count($arr) > 0)
{
  foreach ($arr as &$value) {
    if (file_exists($value)) {
      rename($value,$value + "temp");

    }
    rename(array_search($value,$arr),$value);
    unset($tab[array_search($value, $arr)]);
  }
}
?>


您只需在阵列上循环,直到所有文件都被重命名

我创建了自己的重命名多个文件夹文件名

正如我在问题(就在顶部)中解释和询问的那样,此功能可以防止过度疲劳


我已经创建了自己的重命名多个文件夹文件名

正如我在问题(就在顶部)中解释和询问的那样,此功能可以防止过度疲劳


谢谢回复。我需要重命名所有数组文件。问题是如何在不覆盖的情况下做到这一点。我编辑了我的代码,它不会覆盖您的文件,因为它会检查是否已使用新名称,您只需添加一个条件来检查是否已替换所有文件。哪些文件包含$arr,哪些文件包含$array?使用$value的地址(&)有何帮助?$arr是您的“替换名称”数组,$value是将获取数组中每个值和键的变量。谢谢。我添加了一个新的例子,使问题更清楚。谢谢回复。我需要重命名所有数组文件。问题是如何在不覆盖的情况下做到这一点。我编辑了我的代码,它不会覆盖您的文件,因为它会检查是否已使用新名称,您只需添加一个条件来检查是否已替换所有文件。哪些文件包含$arr,哪些文件包含$array?使用$value的地址(&)有何帮助?$arr是您的“替换名称”数组,$value是将获取数组中每个值和键的变量。谢谢。我添加了一个新的例子,让问题更清楚。到目前为止,你自己试过什么吗?我只知道rename()函数。但我不知道我需要什么样的解决方案。到目前为止你自己试过什么吗?我只知道rename()函数。但我不知道我需要什么样的解决方案。