1

whileループを使用してcsvファイルを読み込みました。

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

これはタイトル行であり、画面に「最初の行がスキップされました」と表示したいので、最初の行をスキップしたいと思います。

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

問題は、しばらくループすると、ここに示すように「タイトル行...スキップ」が何度も出力されるためです。

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, ",")または、割り当てなしで1回呼び出して、ハンドラーを1行進めます。

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]常に「タイトル」と等しくなるため、常にtrueと評価されます。$index変数をインクリメントして、ループの下部近くでif (data[$index] == $title)そのようなことを行うことができます$index++が、基本的にそれを行うのに、なぜそれをforeach行うのですか。

于 2010-07-05T06:33:47.543 に答える