25

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

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

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

4

6 回答 6

74

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

fgetcsv($file, 10000, ",");
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) {
  //....
}
于 2014-07-21T06:02:03.360 回答
44

尝试:

$flag = true;
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) {
   if($flag) { $flag = false; continue; }
   // rest of your code
}
于 2013-01-17T05:33:08.320 回答
9

有点晚了,但这是另一种方法(无需计算所有行):使用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
}

人们可能会认为这更优雅

于 2018-01-31T10:45:11.017 回答
5

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

$firstline = true;
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE)
{
    if (!$firstline) {
        // Code to insert into database
    }
    $firstline = false;
}
于 2013-01-17T05:34:45.710 回答
3

试试这个简单的代码。

$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
}
于 2017-11-02T07:11:22.470 回答
3

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

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

$file = fopen($path, "r");    

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

fseek($file, 1, SEEK_CUR);

您可以使用第三个参数将指针定位在文件中,如下所示:

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

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

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

于 2019-05-29T20:48:09.337 回答