PHP fgetcsv(),其中源文件没有'


PHP fgetcsv() where source file doesn't have an enclosure character?

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

文件内容(输入美元= fopen(<我> 文件名);):

<>之前1、2、3、4、5、6、7a, b, c, d, e, f, g9、8、7、6、5、4、3z, y, x, w, v, u, t之前

我有问题让fgetcsv()工作,因为没有包围值。


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

结果:

<>之前1111之前

我已经尝试了一些我能想到的基本的东西:

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

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

不清楚你的问题是什么。fgetcsvstr_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

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

fgetcsv($file, 1000);

这将自动假定分隔符是逗号。而且长度不能为0,而是应该被读取的正数字符。

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

$values = explode(",", $row);

更合适的方法是将附件值更改为很少使用(或根本不使用)的值。

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

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

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