解析包含php数组新行的CSV文件

时间:2017-05-26 12:29:30

标签: php arrays csv

我有一个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);

它可以解决一个问题。它将值中的新行读为新行,这完全不正确。

如何才能正确读取多行值?

编辑:这个问题主要关注新行。

1 个答案:

答案 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行已损坏,因此该行将不完整。