PHP fgetcsv()其中源文件没有外壳字符?

时间:2011-11-18 21:16:06

标签: php fgetcsv

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

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


    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, ',', '');

任何解决方案的想法?手动编辑我的输入文件并不是一个选项,因为它有数百万行。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

fgetcsv($file, 1000);

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

或者:您不必依赖fgetcsv,只需使用explode

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

答案 2 :(得分:0)

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

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

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

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