1

我使用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

4 回答 4

1

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

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

while (($data = fgetcsv($handle, null, ",")) !== FALSE) {
    // do stuff
}
于 2010-07-05T05:46:52.667 回答
0
if($data[0]=="title") {
  if (!$skipped) {
    echo "Title row..skipping<br />";
    $skipped = true;
  }
}
else
//do stuff
于 2010-07-05T05:34:30.947 回答
0

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

if(!$skipped)
{
    echo "Title row..skipping<br />";
    $skipped = true;
}
else
//do stuff
于 2010-07-05T05:48:13.430 回答
0

我认为使用 foreach 会更优雅:

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

您现在如何拥有它,if (data[0] == "title")每次循环时都在检查。data[0]总是等于“title”,所以它总是评估为真。您可以增加一个$index变量并在循环底部附近执行类似if (data[$index] == $title)then$index++的操作,但是为什么要在foreach本质上为您执行此操作时这样做。

于 2010-07-05T06:33:47.543 回答