0

forループ内でforループを処理しようとしていますが、構文に少し注意してください...これは機能しますか?基本的に、カウントが$ count以下のときに、1,000レコードごとにコードを実行したいのですが...以下の構文は機能しますか、それとももっと良い方法がありますか?

for($x = 0; $x <= 700000; $x++) {
  for($i = 0; $i <= 1000; $i++) {
     //run the code
  }
} 
4

4 に答える 4

2

あなたが持っている構文はうまくいくでしょう、しかし私はそれがあなたが望むことを正確に行うつもりはないと思います。今のところ、それは外側のループを700,001回実行し、それらの700,001回のすべてに対して内側のループを実行します。

つまり、合計で、内側のループは700,001 x1001=約7億70万回実行されます。

これがあなたの望むものではない場合、もう少し情報を提供できますか?「カウントが$count以下のときに、1,000レコードごとにコードを実行したい」とはどういう意味か、実際にはわかりません。名前の付いた変数がまったく表示されません$count

于 2010-06-09T16:19:22.393 に答える
2

ええと、基本的に、私はテキストファイルを読んで、各行をデータベースに挿入しています。私はもともとwhile(!feof($ f))[where $ f = filename]を試しましたが、パイプが壊れていると文句を言い続けます。これは別の方法だと思いました

$ fは、ファイル名ではなく、fopen()によって返されるファイルハンドルである必要があります。

$file_handle = fopen($filename, 'r');

while(!feof($file_handle)) {
    $line = fgets($file_handle);

    $line = trim($line); // remove space chars at beginning and end

    if(!$line) continue; // we don't need empty lines

    mysql_query('INSERT INTO table (column) '
               .'VALUES ("'.mysql_real_escape_string($line).'")');
}

fopen()、fgets()については、php.netのドキュメントをお読みください。文字列を分割する必要がある場合は、explode()も必要になる場合があります。

ファイルが大きくない場合は、次のようにファイルを一度に配列に読み込むことができます。

$filelines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

foreach($filelines as $line) {
   do_stuff_with($line);
}
于 2010-06-09T16:44:17.933 に答える
1

うーん。わかりました...基本的に、私はテキストファイルを読み込んで、各行をデータベースに挿入しています。私はもともとwhile(!feof($ f))[where $ f = filename]を試しましたが、パイプが壊れていると文句を言い続けます。これは別の方法だと思いました。

テキストファイルを1行ずつ読むには、通常、次のようにします。

$file = file("path to file")
foreach($file as $line){
 //insert $line into db
}
于 2010-06-09T16:48:39.827 に答える
0

質問に厳密に答えると、次のようなものが必要になります。

// $x would be 0, then 1000, then 2000, then 3000
for($x = 0; $x < 700000; $x += 1000) {
  // $i would be $x through $x + 999
  for($i = $x; $i < $x + 1000; $i++) {
     //run the code
  }
}

ただし、ファイルをデータベースにインポートするための他の方法の1つを実際に検討する必要があります。

于 2010-06-09T17:10:22.557 に答える