我有一个CSV文件:
Test1,One line
Test2,"Two lines
Hello"
Test3,One line
如您所见,其中一列的值用新行分隔。
要将此CSV文件解析为数组,我运行:
$csvArray = array();
$csvData = file_get_contents('file.csv');
$lines = explode(PHP_EOL, $csvData);
foreach ($lines as $line) {
$csvArray[] = str_getcsv($line);
}
// print_r($csvArray);
它可以解决一个问题。它将值中的新行读为新行,这完全不正确。
如何才能正确读取多行值?
编辑:这个问题主要关注新行。
答案 0 :(得分:8)
$fp = fopen('filecsv', 'r');
$csvArray = array();
while ($row = fgetcsv($fp)) {
$csvArray[] = $row;
}
fclose($fp);
使用explode(PHP_EOL, $csvData)
将无法通过行分隔符正确拆分CSV。多行单元格用引号封装,意味着该行将继续到新行,直到它们被关闭。
PHP内置的jackson 2.8.5函数将正确读取文件中的单行,将指针移动到进程中的下一行。虽然str_getcsv
只会从字符串中读取一行而不考虑其他行(因为它是一个字符串,而不是一个流)。
由于您已将字符串与explode
分开,因此您的CSV行已损坏,因此该行将不完整。