在csv中检查标头并在php中忽略标头

时间:2012-07-27 16:15:59

标签: php file-upload csv fgetcsv

我想检查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);
}

2 个答案:

答案 0 :(得分:3)

我假设您的完整代码使用循环(whilefor)。

因此,您有几个选择。

  • 只需跳过第一行始终
  • 使用逻辑测试标题行然后跳过。

无论哪种方式,continue都是关键部分。

PHP伪代码:

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

  // data rows
}

更新

确定第一行是否为标题行的逻辑在您的情况下似乎是更好的解决方案。您可以使用以下内容进行测试。

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

注意:这假设第一列数据是 avgTemperature ,它的标题是 avgTemperature 。根据需要进行调整。

答案 1 :(得分:2)

根据您的评论,以及实际数据是温度(即数字数据)的想法,如果您有标题,那么它们将是文本字符串而不是数字。因此,您可以这样做:

$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));