0

我正在使用复制文件,我可以将一个文件复制到多个文件夹,但是将多个文件复制到多个文件夹时出现问题。

我的代码:

$sourcefiles = array('./folder1/test.txt', './folder1/test2.txt');

$destinations = array('./folder2/test.txt', './folder2/test2.txt');

//do copy

foreach($sourcefiles as $source) {

    foreach($destinations as $des){
        copy($source, $des);
    }

}

但是这段代码不起作用!

你能给我一个解决方案吗:(

谢谢你的帮助 !

4

5 回答 5

5

您当前所做的是循环源文件,在第一次迭代中是“test.txt”,然后循环目标数组并执行复制功能 2 次:

folder1/test.txt 的第一次迭代

  • 复制(“文件夹1/test.txt”,“文件夹2/test.txt”);
  • 复制(“文件夹1/test.txt”,“文件夹2/test2.txt”;

文件夹 1/test2.txt 的第二次迭代:

  • 复制(“文件夹1/test2.txt”,“文件夹2/test.txt”);
  • 复制(“文件夹1/test2.txt”,“文件夹2/test2.txt”;

最后,您已经用 $source 数组中的最后一个文件覆盖了这两个文件。所以“folder2”中的两个文件都包含test2.txt的数据

您正在寻找的是:

foreach($sourcefiles as $key => $sourcefile) {
  copy($sourcefile, $destinations[$key]);
}

在上面的例子中,$sourcefile 等于 $sourcefiles[$key]。

这是基于 PHP 自动为您的值分配键的事实。$sourcefiles = array('file1.txt', 'file2.txt'); 可以用作:

$sourcefiles = array(
  0 => 'file1.txt',
  1 => 'file2.txt'
);

另一种选择是在 for 循环中使用其中一个数组的长度,它的作用相同,但方式不同:

for ($i = 0; $i < count($sourcefiles); $i++) {
    copy($sourcefiles[$i], $destinations[$i]);
}
于 2013-06-07T10:11:53.597 回答
1

我认为你想要做的是这个;

for ($i = 0; $i < count($sourcefiles); $i++) {
    copy($sourcefiles[$i], $destinations[$i]);
}

您当前的代码将覆盖以前的副本。

于 2013-06-07T10:10:48.870 回答
1

假设您有相同数量的文件:

// php 5.4, lower version users should replace [] with array() 
$sources = ['s1', 's2'];
$destinations = ['d1', 'd2'];

$copy = [];

foreach($sources as $index => $file) $copy[$file] = $destinations[$index];


foreach($copy as $source => $destination) copy($source, $destination);
于 2013-06-07T10:10:56.990 回答
1

由于两个数组需要相同的索引,因此请使用for循环。

for ($i = 0; $i < count($sourcefiles); $i++) {
    //In here, $sourcefiles[$i] is the source, and $destinations[$i] is the destination.
}
于 2013-06-07T10:11:22.183 回答
0

当然不是。您的嵌套循环正在以这样一种方式复制文件,即它们必然会覆盖以前的文件副本。我认为您需要使用更简单的解决方案。在嵌套循环中复制没有任何意义。

如果你有源文件和目标文件,那么我建议一个循环:

$copyArray = array(
    array('source' => './folder1/test.txt', 'destination' => './folder2/test.txt'),
    array('source' => './folder1/test.txt', 'destination' => './folder2/test.txt'));

foreach ($copyArray as $copyInstructions)
{
    copy($copyInstructions['source'], $copyInstructions['destination']);
}

但请确保您的目标文件名不同!

于 2013-06-07T10:08:13.407 回答