我正在尝试在 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
}
}
好吧,基本上,我正在读取一个文本文件并将每一行插入到一个数据库中。我最初确实尝试过 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).'")');
}
阅读 php.net 上有关 fopen()、fgets() 的文档。如果您需要拆分字符串,您可能还需要explode()。
如果您的文件不大,您可能希望像这样一次将其读入数组:
$filelines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach($filelines as $line) {
do_stuff_with($line);
}
您拥有的语法将起作用,但我认为它不会完全符合您的要求。现在,它将执行外循环 700,001 次,并且对于这 700,001 次中的每一个,它将执行内循环。
这意味着,内循环总共将运行 700,001 x 1001 = 约 7.007 亿次。
如果这不是您想要的,您能否提供更多信息?我无法真正弄清楚“我想在计数等于或小于 $count 时为每 1,000 条记录运行代码”是什么意思。我根本没有看到任何命名$count
的变量。
唔。好的...嗯,基本上,我正在读取一个文本文件并将每一行插入到一个数据库中。我最初确实尝试过 while(!feof($f)) [where $f = filename],但它一直抱怨管道损坏。我以为这将是另一种方式去..
要逐行读取文本文件,我通常:
$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
}
}
但是,您应该真正考虑将文件导入数据库的其他方法之一。