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

好吧,基本上,我正在读取一个文本文件并将每一行插入到一个数据库中。我最初确实尝试过 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);
}
于 2010-06-09T16:44:17.933 回答
2

您拥有的语法将起作用,但我认为它不会完全符合您的要求。现在,它将执行外循环 700,001 次,并且对于这 700,001 次中的每一个,它将执行内循环。

这意味着,内循环总共将运行 700,001 x 1001 = 约 7.007 亿次。

如果这不是您想要的,您能否提供更多信息?我无法真正弄清楚“我想在计数等于或小于 $count 时为每 1,000 条记录运行代码”是什么意思。我根本没有看到任何命名$count的变量。

于 2010-06-09T16:19:22.393 回答
1

唔。好的...嗯,基本上,我正在读取一个文本文件并将每一行插入到一个数据库中。我最初确实尝试过 while(!feof($f)) [where $f = filename],但它一直抱怨管道损坏。我以为这将是另一种方式去..

要逐行读取文本文件,我通常:

$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
  }
}

但是,您应该真正考虑将文件导入数据库的其他方法之一。

于 2010-06-09T17:10:22.557 回答