Php 添加此循环的边

Php 添加此循环的边,php,Php,我正在尝试将一些文件从一个目录移动到另一个目录,我发现了这个脚本,但是这个脚本在所有文件中循环,我想要的是将这个脚本更改为只循环50个文件。守则: // Get array of all source files $files = scandir("source"); // Identify directories $source = "source/"; $destination = "destination/"; // Cycle through all source files forea

我正在尝试将一些文件从一个目录移动到另一个目录,我发现了这个脚本,但是这个脚本在所有文件中循环,我想要的是将这个脚本更改为只循环50个文件。守则:

// Get array of all source files
$files = scandir("source");
// Identify directories
$source = "source/";
$destination = "destination/";
// Cycle through all source files
foreach ($files as $file) {
  if (in_array($file, array(".",".."))) continue;
  // If we copied this successfully, mark it for deletion
  if (copy($source.$file, $destination.$file)) {
    $delete[] = $source.$file;
  }
}
// Delete all successfully-copied files
foreach ($delete as $file) {
  unlink($file);
}

也许我没有弄清楚,但你考虑过简单的计数吗

$i = 0;
foreach ($files as $file) {
  if (in_array($file, array(".",".."))) continue;
  // If we copied this successfully, mark it for deletion
 if($i < 50) {
  if (copy($source.$file, $destination.$file)) {
    unlink($source.$file); //move unlink here to avoid a second loop
  }
  else{
   break;
  }
 }
 $i++;
}
$i=0;
foreach($files作为$file){
如果(在数组中($file,array(“.”,“.”))继续;
//如果复制成功,请将其标记为删除
如果($i<50){
如果(复制($source.$file,$destination.$file)){
取消链接($source.$file);//将取消链接移到此处以避免第二次循环
}
否则{
打破
}
}
$i++;
}

使用for循环,而不是foreach循环

在这种情况下,
for
循环更为合理,因为每次运行此代码时,您都会循环一定次数

foreach
循环用于迭代整个数组或对象

这是一种使命感。当其他程序员查看您的代码时,他们会立即知道您正在循环50次,而不是循环整个数组

// Get array of all source files
$files = scandir("source");

// Identify directories
$source = "source/";
$destination = "destination/";

for ($i=0; $i < 50; $i++) {
    $file = $files[$i];

    if( !$file ) 
        break;

    if (in_array($file, array(".",".."))) continue;

    // If we copied this successfully, mark it for deletion
    if (copy($source.$file, $destination.$file)) {
       $delete[] = $source.$file;
    }
}

// Delete all successfully-copied files
foreach ($delete as $file) {
    unlink($file);
}
//获取所有源文件的数组
$files=scandir(“源”);
//识别目录
$source=“source/”;
$destination=“destination/”;
对于($i=0;$i<50;$i++){
$file=$files[$i];
如果(!$file)
打破
如果(在数组中($file,array(“.”,“.”))继续;
//如果复制成功,请将其标记为删除
如果(复制($source.$file,$destination.$file)){
$delete[]=$source.$file;
}
}
//删除所有成功复制的文件
foreach($delete as$file){
取消链接($文件);
}

您可以设置
计数
并在循环达到50次时停止循环:

$count = 0;
$maxiterations = 50;

foreach ($files as $file) {
    if ($count  < $maxiterations) {
        if (in_array($file, array(".",".."))) continue;
        // If we copied this successfully, mark it for deletion
        if (copy($source.$file, $destination.$file)) {
            $delete[] = $source.$file;
        }
        $i++;
    } 
    else {
        break;
    }
}
$count=0;
$maxiterations=50;
foreach($files作为$file){
如果($count<$maxiterations){
如果(在数组中($file,array(“.”,“.”))继续;
//如果复制成功,请将其标记为删除
如果(复制($source.$file,$destination.$file)){
$delete[]=$source.$file;
}
$i++;
} 
否则{
打破
}
}

对循环使用
,而不是对每个
循环使用
。@Nicholas是的,我试过了,但没用:for($I=1;$I<500;$I++){if(in_数组($files,array(“.”,“.”)继续;//如果复制成功,如果(copy($source.$files,$destination.$files)){$delete[]=$source.$files;}}}即使我们在50岁时就完成了,它仍然会在所有文件中循环。编辑:啊,你已经修好了。他只想循环前50个,当你想循环一个数组中的所有东西时,通常使用
foreach
。这是一种使命感。当正常的
for
循环可用时,使用
foreach
break
有点愚蠢。