【问题标题】:PHP echo issue while in a while loopPHP在while循环中回显问题
【发布时间】:2010-07-05 05:28:15
【问题描述】:

我使用 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的输出缓冲有关系吗?

【问题讨论】:

  • 你的输出看起来很奇怪。您确定您的 csv 文件格式正确吗?
  • 发布更多代码。您的问题不在我们能看到的部分。

标签: php while-loop echo buffering


【解决方案1】:

或者调用fgetcsv($handle, null, ",")一次而不赋值,将处理程序向前移动一行:

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

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

【讨论】:

    【解决方案2】:
    if($data[0]=="title") {
      if (!$skipped) {
        echo "Title row..skipping<br />";
        $skipped = true;
      }
    }
    else
    //do stuff
    

    【讨论】:

    • 聪明 ;) 我应该想到的
    【解决方案3】:

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

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

    【讨论】:

    • 注意:来自 Ast 的回答;P
    【解决方案4】:

    我认为使用 foreach 会更优雅:

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 2014-12-18
      • 2016-01-06
      • 2014-02-02
      相关资源
      最近更新 更多