4

我有一个输入 CSV,其中“列”没有包含在任何内容中。

文件内容($input = fopen(文件名);):

    1,2,3,4,5,6,7
    a,b,c,d,e,f,g
    9,8,7,6,5,4,3
    z,y,x,w,v,u,t

我在让 fgetcsv() 工作时遇到问题,因为值周围没有外壳。



    while($row = fgetcsv($input)) {
      print_r($row);
    }

结果是:

1111

我已经尝试了一些我能想到的基本事情:

fgetcsc($file, 0, ',', '\');

fgetcsc($file, 0, ',', '');

有什么想法可以解决吗?手动编辑我的输入文件并不是一个真正的选择,因为它有几百万行。

4

3 回答 3

4

目前尚不清楚您的问题是什么。fgetcsv并且str_getcsv还可以使用无引号的列:

print_r(str_getcsv('1,2,3,4,5,6,7'));

回报:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
)

引号是可选的,仅适用于可以在值中包含列分隔符的 CSV:

 column1, "Column 2 with , comma inside", colum3
于 2011-11-18T21:23:37.290 回答
1

您根本不必使用最后两个参数,它们是可选的。只需使用:

fgetcsv($file, 1000);

这将自动假定分隔符是逗号。此外,长度不得为 0,而是应读取的正数字符。

或者:您不必依赖fgetcsv,您可以使用explode

$values = explode(",", $row);
于 2011-11-18T21:19:42.893 回答
0

一种更合适的方法是将封闭值更改为很少使用(或根本不使用)的值。

我发现,最好的变体是 chr(0) 字符。

fgetcsv($handle, null, "\t", chr(0))

对我来说很好,不应该中断,除非你有一个非常极端的 CSV 数据案例。

于 2017-10-10T17:09:33.947 回答