【问题标题】:Skip first line of fgetcsv method跳过 fgetcsv 方法的第一行
【发布时间】:2013-01-17 05:29:24
【问题描述】:

我有一个 CSV 文件,我从 CSV 文件中读取数据,然后我想跳过 CSV 文件的第一行。其中将包含任何标题。我正在使用此代码。

while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE)
{
    // Code to insert into database
}

当我将数据插入数据库时​​,不应将标题保存到数据库中。

【问题讨论】:

标签: php


【解决方案1】:

在开始 while 循环之前,只需获取第一行并且什么都不做。这样就不需要测试它是否是第一行的逻辑。

fgetcsv($file, 10000, ",");
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) {
  //....
}

【讨论】:

  • 这样的回答让你觉得:“为什么我之前没有想到这个解决方案???”。简单有效。如果你想跳过 x 行,只需添加一个 for 子句就可以了!
  • 我会说这是比基于标志的解决方案更好的答案,无需在 while 循环内部添加逻辑
  • 这个答案应该被选为最佳答案。最简单的解决方案总是最好的。另外,就性能而言,这比其他的稍好
【解决方案2】:

尝试:

$flag = true;
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) {
   if($flag) { $flag = false; continue; }
   // rest of your code
}

【讨论】:

  • 我认为您在 if 语句之前缺少 { 。如果您想在示例中完整,还有一个结束 }。
【解决方案3】:

有点晚了,但这里有另一种方法(无需计算所有行):fgets

$file = fopen($filename, 'r');  // create handler
fgets($file);  // read one line for nothing (skip header)
while (($line = fgetcsv($file, 10000, ",")) !== FALSE) {
    // do your thing
}

人们可能会认为这更优雅

【讨论】:

    【解决方案4】:

    您可以添加一个简单的检查,如果检查失败则跳过查询:

    $firstline = true;
    while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE)
    {
        if (!$firstline) {
            // Code to insert into database
        }
        $firstline = false;
    }
    

    【讨论】:

      【解决方案5】:

      无论当前指针位置如何,您都应该使用fseek() method 来获得所需的行。

      在本例中,获取循环后的第一行:

      $file = fopen($path, "r");    
      
      while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) {
        // ...
      }
      
      fseek($file, 1, SEEK_CUR);
      

      你可以使用第三个参数来定位文件中的指针,原样:

      SEEK_SET - 它将文件指针位置移动到文件的开头。

      SEEK_CUR – 将文件指针位置移动到给定位置。

      SEEK_END – 将文件指针位置移动到文件末尾。

      【讨论】:

      • 这是最好的答案!只需获得所需的行来告知其位置。当前接受的答案涉及在循环的每个时钟进行检查...
      【解决方案6】:

      试试这个简单的代码。

      $file = fopen('example.csv', 'r');  // Here example is a CSV name
      $row = 1;
      while (($line = fgetcsv($file, 10000, ",")) !== FALSE) {
      // $line is an array of the csv elements
      if($row == 1){ $row++; continue; }   // continue is used for skip row 1
      // print_r($line);
      // rest of your code
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-07
        • 2013-08-17
        • 2013-03-08
        • 1970-01-01
        相关资源
        最近更新 更多