php嵌套用于语句?

时间:2010-06-09 16:16:04

标签: php nested-loops

我正在尝试在for循环中处理for循环,并且只是对语法有点警惕......这会有效吗?基本上,我想为每1,000条记录运行代码,而计数等于或小于$ count ...下面的语法是否有效,或者有更好的方法吗?

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

4 个答案:

答案 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
  }
}

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