forループ内でforループを処理しようとしていますが、構文に少し注意してください...これは機能しますか?基本的に、カウントが$ count以下のときに、1,000レコードごとにコードを実行したいのですが...以下の構文は機能しますか、それとももっと良い方法がありますか?
for($x = 0; $x <= 700000; $x++) {
for($i = 0; $i <= 1000; $i++) {
//run the code
}
}
forループ内でforループを処理しようとしていますが、構文に少し注意してください...これは機能しますか?基本的に、カウントが$ count以下のときに、1,000レコードごとにコードを実行したいのですが...以下の構文は機能しますか、それとももっと良い方法がありますか?
for($x = 0; $x <= 700000; $x++) {
for($i = 0; $i <= 1000; $i++) {
//run the code
}
}
あなたが持っている構文はうまくいくでしょう、しかし私はそれがあなたが望むことを正確に行うつもりはないと思います。今のところ、それは外側のループを700,001回実行し、それらの700,001回のすべてに対して内側のループを実行します。
つまり、合計で、内側のループは700,001 x1001=約7億70万回実行されます。
これがあなたの望むものではない場合、もう少し情報を提供できますか?「カウントが$count以下のときに、1,000レコードごとにコードを実行したい」とはどういう意味か、実際にはわかりません。名前の付いた変数がまったく表示されません$count
。
ええと、基本的に、私はテキストファイルを読んで、各行をデータベースに挿入しています。私はもともと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);
}
うーん。わかりました...基本的に、私はテキストファイルを読み込んで、各行をデータベースに挿入しています。私はもともとwhile(!feof($ f))[where $ f = filename]を試しましたが、パイプが壊れていると文句を言い続けます。これは別の方法だと思いました。
テキストファイルを1行ずつ読むには、通常、次のようにします。
$file = file("path to file")
foreach($file as $line){
//insert $line into db
}
質問に厳密に答えると、次のようなものが必要になります。
// $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つを実際に検討する必要があります。