使用php从csv文件中提取数据

时间:2011-05-11 17:16:01

标签: php csv

我写了这段代码:

$handle = fopen('upload/EFT.csv', "r");  
   while (! feof($handle)) { 
    print_r(fgetcsv($handle));
    }
fclose($handle);

这是文件:

AKRV0002,AKR,V0002,Akron
AKRV0006,AKR,V0006,Akron
AKRV0007,AKR,V0007,Akron
AKRV0011,AKR,V0011,Akron
AKRV0012,AKR,V0012,Akron
ATLV0019,ATL,V0019,ATLANTA
ATLV0021,ATL,V0021,ATLANTA

它返回:

Array ( [0] => AKRV0002 [1] => AKR [2] => V0002 [3] => Akron AKRV0006 [4] => AKR [5] => V0006 [6] => Akron AKRV0007 [7] => AKR [8] => V0007 [9] => Akron AKRV0011 [10] => AKR [11] => V0011 [12] => Akron AKRV0012 [13] => AKR [14] => V0012 [15] => Akron ATLV0019 [16] => ATL [17] => V0019 [18] => ATLANTA ATLV0021 [19] => ATL [20] => V0021 [21] => ATLANTA

如何让它返回新数组中的每一行?

2 个答案:

答案 0 :(得分:4)

了解数组位置3是“Akron AKRV0006” - 这是第1行的最后一个值,第2行的第一个值。似乎没有正确读取换行符。没有你的原始文件,我不知道为什么。

修复后,您会看到fgetcsv一次只读取一行(换句话说,返回一个数据来自只有一行),而不是所有线路一下子。因此,您需要循环并将每个数组添加到另一个数组,直到fgetcsv不再返回数据:

$data = array();
while ($row = fgetcsv($handle)) {
    $data[] = $row;
}

答案 1 :(得分:1)

你碰巧使用旧的Mac电脑吗?

“注意:如果PHP在Macintosh计算机上读取或创建文件时没有正确识别行结尾,启用auto_detect_line_endings运行时配置选项可能有助于解决问题。”

http://php.net/manual/en/function.fgetcsv.php