1

csvファイルにヘッダーが含まれているかどうかを確認し、ヘッダーを無視したいと思います。

最初の列が文字でないかどうかを確認する必要があります

csvファイルの形式は次のとおりです:avgTemperature、minTemperature、maxTemperature

$f = fopen("./uploads/" .$filename, "r");
$string = "avgTemperature";
if (fgetcsv($f)==$string){  
    // read the first line and ignore it
    fgets($f);
}
4

2 に答える 2

3

あなたの完全なコードはループ(whileまたはfor)を使用していると思います。

そのため、いくつかのオプションがあります。

  • 常に最初の行をスキップするだけです。
  • ロジックを使用してヘッダー行をテストしてからスキップします。

いずれにせよcontinue、重要な部分です。

PHP擬似コード:

while (…) {
  if ($row == $header_row) {
    continue;
  }

  // data rows
}

アップデート

最初の行がヘッダー行であるかどうかを判断するためのロジックは、あなたの場合のより良い解決策のようです。以下を使用してテストできます。

if ($row[0] == 'avgTemperature') {
  // header row
}

注:これは、データの最初の列がavgTemperatureであり、そのヘッダーがavgTemperatureであると想定しています。必要に応じて調整してください。

于 2012-07-27T16:19:01.630 に答える
3

あなたのコメントから、そして実際のデータは温度(つまり数値データ)であるという考えから、ヘッダーがある場合、それらは数字ではなくテキスト文字列になります。したがって、次のようなことができます。

$f = fopen("./uploads/" .$filename, "r");

if(!($data = fgetcsv($f))) {
    return;    //most likely empty file
}

if(!is_numeric($data[0])) {
    //this is your header line - skip it - and read the next line
    $data = fgetcsv($f);
}

while($data) {
    //process a line of data
    ...
    //and read the next line
    $data = fgetcsv($f);
}

編集:最後のループの代替バージョンは次のようになります:

do {
    //process a line of data
    ...
}
while ($data = fgetcsv($f));
于 2012-07-27T16:25:17.570 に答える