我正在尝试在for循环中处理for循环,并且只是对语法有点警惕......这会有效吗?基本上,我想为每1,000条记录运行代码,而计数等于或小于$ count ...下面的语法是否有效,或者有更好的方法吗?
for($x = 0; $x <= 700000; $x++) {
for($i = 0; $i <= 1000; $i++) {
//run the code
}
}
答案 0 :(得分:2)
您拥有的语法将起作用,但我认为它不会完全符合您的要求。现在,它将进行外循环700,001次,而对于那些700,001次的每一个,它将进行内循环。
这意味着,总的来说,内循环将运行700,001 x 1001 =约700.7百万次。
如果这不是您想要的,您能提供更多信息吗?我无法弄清楚“当计数等于或小于$ count”时,“我想为每1,000条记录运行代码”。我根本没有看到任何名为$count
的变量。
答案 1 :(得分:2)
好吧,基本上,我正在读取文本文件并将每行插入数据库。我最初尝试的时候(!feof($ f))[其中$ 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).'")');
}
在php.net上阅读fopen(),fgets()的文档。如果需要拆分字符串,可能还需要使用explode()。
如果您的文件不大,您可能希望立即将其读入数组:
$filelines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach($filelines as $line) {
do_stuff_with($line);
}
答案 2 :(得分:1)
嗯。好的......基本上,我正在读取文本文件并将每行插入数据库。我最初尝试的时候(!feof($ f))[其中$ f = filename],但它一直抱怨管道坏了。我认为这将是另一种方式..
要逐行读取文本文件:
$file = file("path to file")
foreach($file as $line){
//insert $line into db
}
答案 3 :(得分: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
}
}
但是,您应该考虑将文件导入数据库的其他方法之一。