Проблема с эхом PHP во время цикла - PullRequest
1 голос
/ 05 июля 2010

Я читаю в CSV-файле, используя цикл while:

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 ]

1 голос
/ 05 июля 2010

Или позвоните fgetcsv($handle, null, ",") один раз без назначения, чтобы переместить обработчик на одну строку вперед:

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

while (($data = fgetcsv($handle, null, ",")) !== FALSE) {
    // do stuff
}
0 голосов
/ 05 июля 2010

Я думаю, что было бы более элегантно использовать 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 по сути сделает это за вас.

0 голосов
/ 05 июля 2010

Если вы точно знаете, что вам нужно пропустить только первую строку, то

if(!$skipped)
{
    echo "Title row..skipping<br />";
    $skipped = true;
}
else
//do stuff
0 голосов
/ 05 июля 2010
if($data[0]=="title") {
  if (!$skipped) {
    echo "Title row..skipping<br />";
    $skipped = true;
  }
}
else
//do stuff
...