2013-06-26 38 views
0

以下是我的CSV文件。正如你所看到的,它是五列,第五列還有多個選項,逗號分隔。PHP str_getcsv產生意外的數組輸出

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 
    ) 
) 

,你可以看到,由於某種原因,這是不正確的解析。我想我可以用新的線條爆炸,然後再用逗號爆炸......但是,我想知道爲什麼這不起作用。

回答

0

str_getcsv()僅用於返回一行,但您需要所有行。相反,在循環中使用fgetcsv。由於fgetcsv使用文件指針,它可以跟蹤它停止解析前一行的位置,所以下次您調用它時,解析會繼續到正確的位置(這是下一個csv行)。

+0

或者,您可以將字符串爆炸(「\ n」),然後遍歷每行並將其反饋給str_getcsv – ina

+0

@ina,如果任何字段包含新行字符,將會失敗。 – goat