PHP str_getcsv产生意外的数组输出

时间:2013-06-26 05:05:28

标签: php csv

以下是我的CSV文件。如您所见,它是五列,在第五列上有多个选项也以逗号分隔。

column 1,column 2,column 3,column 4,column 5
value,value,value,value,"value, value2, value3"
val,val,val,val,"opt, opt2, opt3"

以下是我正在使用解析上面的代码......

$csvData = file_get_contents('test2.csv'); 

$csvNumColumns = 5;
$csvDelim = ',';
$csvEnclosure = '"';

$results = array_chunk(str_getcsv($csvData, $csvDelim, $csvEnclosure), $csvNumColumns); 
print_r($results);

我的print_r的输出如下......

Array
(
[0] => Array
    (
        [0] => column 1
        [1] => column 2
        [2] => column 3
        [3] => column 4
        [4] => column 5
value
    )

[1] => Array
    (
        [0] => value
        [1] => value
        [2] => value
        [3] => value, value2, value3
val
        [4] => val
    )

[2] => Array
    (
        [0] => val
        [1] => val
        [2] => opt, opt2, opt3
    )
)

正如您所看到的,由于某种原因,这未被正确解析。我想我可以通过新行再次用逗号来爆炸它......但是,我想理解为什么这不起作用。

1 个答案:

答案 0 :(得分:0)

str_getcsv()仅用于返回一行,但您想要所有行。相反,在循环中使用fgetcsv。由于fgetcsv使用文件指针,它可以跟踪它停止解析前一行的位置,因此下次调用它时,解析将继续在正确的位置(这是下一个csv行)。