0

いくつかのファイルをディレクトリから別のディレクトリに移動しようとしています。このスクリプトはこちらで見つかりましたが、このスクリプトはすべてのファイルをループします。このスクリプトを変更して、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);
}
4

3 に答える 3

0

よくわからなかったかもしれませんが、単純な数え方は考えましたか?

$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++;
}
于 2013-03-15T06:26:10.367 に答える
0

foreach ループではなく、for ループを使用します。

この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);
}
于 2013-03-15T06:26:30.287 に答える
0

a を設定してcount、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;
    }
}
于 2013-03-15T06:26:55.223 に答える