2011-01-19 75 views
12

考慮小號CSV文件中像這樣如何解析CSV具有多數據列中的PHP

item1,"description 1" 
item2,"description 2" 
item3,"description 3 
description 3 continues on new line" 
item4,"description 4" 

應解析這樣

item1,"description 1" 
item2,"description 2" 
item3,"description 3 description 3 continues on new line" 
item4,"description 4" 

有沒有辦法在解析這個CSV PHP有多行值?

+0

編寫解析器? – 2011-01-19 07:58:55

+0

@goreSplatter,或只是使用現有的。 – 2011-01-19 08:18:11

+0

@Bart對不起,我忽略了另一個明顯的解決方案。 – 2011-01-19 08:21:13

回答

8

fgetcsv應該能夠正確解析這個。
無論如何,我不會推薦這樣做,解析CSV中有很多這樣的陷阱。

8

這裏有一些工作示例如何做到這一點。我使用fgetcsv:

CSV字符串變量$ CsvString:在文件

$fp = tmpfile(); 
fwrite($fp, $CsvString); 
rewind($fp); //rewind to process CSV 
while (($row = fgetcsv($fp, 0)) !== FALSE) { 
    print_r($row); 
} 

CSV:

if (($handle = fopen("test.csv", "r")) !== FALSE) { 
    while (($row = fgetcsv($handle, 0, ",")) !== FALSE) { 
    print_r($row); 
    } 
    fclose($handle); 
} 
6

基於StanleyD答案,但使用臨時存儲塊(而不是寫磁盤)以獲得更好的性能:

$fp = fopen('php://temp','r+'); 
fwrite($fp, $CsvString); 
rewind($fp); //rewind to process CSV 
while (($row = fgetcsv($fp, 0)) !== FALSE) { 
    print_r($row); 
}