在使用PHP从csv文件中提取数据时,如何跳过第一部分数据?


How do I skip the first piece of data when extracting from a csv file with PHP

下面的代码是我用来从csv文件中获取整个数据列的代码。(有很多列,但我只需要第2列)。这段代码将把所有数据放入名为$cbsmin的数组中。我需要做的是跳过每个文件中的第一个数据,因为它是类别名称,而不是实际的数据。

怎样才能做到最好呢?

for($i=0;$i<count($files);$i++){
    if (($handle = fopen($files[$i], "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $cbsmin[] = $data[2];
        }
        fclose($handle);
    }
}

使用一个简单的标志来标记它是否为第一行。如果是,则将标志重置为false并跳过该行。

$isfirst = true;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($isfirst)
    {
        $isfirst = false;
        continue;
    }
    $cbsmin[] = $data[2];
}

只执行一个

   fgetcsv($handle, 1000, ",");

在进入while循环之前抛出一个额外的read

for($i=0;$i<count($files);$i++){
    if (($handle = fopen($files[$i], "r")) !== FALSE) {
        // eat the header
        fgetcsv($handle, 1000, ",");
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $cbsmin[] = $data[2];
        }
        fclose($handle);
    }
}
我为此使用的另一种技术是将标题行用于数据中的键。如果标题行随时间推移和文件之间保持一致,则此方法有效。
for($i=0;$i<count($files);$i++){
    if (($handle = fopen($files[$i], "r")) !== FALSE) {
        // eat the header
        $header = fgetcsv($handle, 1000, ",");
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $data = array_combine($header, $data);
            $cbsmin[] = $data["Customer Name"];
        }
        fclose($handle);
    }
} 

如果你要用很多字段做一些重要的事情,那么就不必使用字段偏移量了。

相关文章: