在while循环中PHP回显问题

时间:2010-07-05 05:28:15

标签: php while-loop echo buffering

我使用while循环读取csv文件:

while (($data = fgetcsv($handle, null, ",")) !== FALSE) 

我想跳过第一行,因为这是标题行,我想在屏幕上显示“跳过第一行”。

if($data[0]=="title")
echo "Title row..skipping<br />";  
else
//do stuff

问题是因为它在一个while循环中打印出“标题行...跳过”这里显示的一堆次数:

Checking row 0...
Title row..skipping
Title row..skipping
Title row..skipping
Title row..skipping
Title row..skipping
Title row..skipping
Title row..skipping
Checking row 1...

我应该怎么做才能只打印一次?它与php的输出缓冲有关吗?

4 个答案:

答案 0 :(得分:1)

或者在没有分配的情况下调用fgetcsv($handle, null, ",")一次,将处理程序向前移动一行:

fgetcsv($handle, null, ",");

while (($data = fgetcsv($handle, null, ",")) !== FALSE) {
    // do stuff
}

答案 1 :(得分:0)

if($data[0]=="title") {
  if (!$skipped) {
    echo "Title row..skipping<br />";
    $skipped = true;
  }
}
else
//do stuff

答案 2 :(得分:0)

如果你确定你只需要跳过第一行,那么

if(!$skipped)
{
    echo "Title row..skipping<br />";
    $skipped = true;
}
else
//do stuff

答案 3 :(得分:0)

我认为使用foreach会更优雅:

foreach data as item {
  if (item == "title") {
   echo "Skipping title<br/>";
  }
}

你现在如何拥有它,每次循环时你都在检查if (data[0] == "title")data[0]将始终等于“title”,因此它将始终评估为true。您可以增加$index变量并在循环底部附近执行if (data[$index] == $title)然后$index++之类的操作,但为什么foreach基本上会为您执行此操作。