0

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

3 回答 3

2

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

$isfirst = true;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($isfirst)
    {
        $isfirst = false;
        continue;
    }
    $cbsmin[] = $data[2];
}
于 2013-05-27T21:27:52.480 回答
2

只执行一个

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

在while循环之前。

于 2013-05-27T21:30:32.847 回答
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);
    }
} 

如果你对很多字段做任何不平凡的事情,它就必须使用字段偏移量。

于 2013-05-27T21:34:24.753 回答