0

下面是我的 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
    )
)

如您所见,由于某种原因,它没有被正确解析。我想我可以用新的行来爆炸它,然后用逗号再次爆炸......但是,我想了解为什么这不起作用。

4

1 回答 1

0

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

于 2013-06-26T05:19:13.073 回答