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

时间:2013-05-27 21:26:17

标签: php csv extract

以下代码是我用来从我的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);
    }
}

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

只需执行一次

   fgetcsv($handle, 1000, ",");
在while循环之前

答案 2 :(得分:0)

在进入while循环之前,只需要额外阅读

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

如果你在很多领域做任何重要的事情,那就不得不使用字段偏移。