【问题标题】:Parse CSV file which contains a new line to php array解析 CSV 文件,其中包含 php 数组的新行
【发布时间】:2017-10-27 08:28:09
【问题描述】:

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

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

如何使它正确读取多行值?

编辑:这个问题的重点是换行。

【问题讨论】:

标签: php arrays csv


【解决方案1】:
$fp = fopen('filecsv', 'r');

$csvArray = array();

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

fclose($fp);

使用 explode(PHP_EOL, $csvData) 将无法按行分隔符正确拆分 CSV。多行单元格用引号封装,这意味着该行将继续到新行,直到它们被关闭。

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

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

【讨论】:

  • 您能否详细说明您的答案?
  • 太棒了,非常感谢你。你完全正确!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多