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

解析包含php数组新行的CSV文件,php,arrays,csv,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) { $csvArr

我有一个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);
它解决了一个问题。它将值中的新行读取为新行,这是完全不正确的

如何使其正确读取多行值

编辑:这个问题集中在新词上

$fp = fopen('filecsv', 'r');

$csvArray = array();

while ($row = fgetcsv($fp)) {
    $csvArray[] = $row;
}

fclose($fp);
使用
explode(PHP_EOL,$csvData)
将无法通过其行定界符正确分割CSV。多行单元格用引号封装,这意味着行将继续到新行上,直到新行关闭为止

PHP的内置函数将正确读取文件中的一行,并将指针移动到进程中的下一行。而
str_getcsv
将只从字符串中读取一行,而不考虑其他行(因为它是字符串,而不是流)


由于您已使用
explode
拆分字符串,您的CSV行已断开,因此该行将不完整。

请详细说明您的答案。太好了,非常感谢。你完全正确!可能重复的