【问题标题】:CSV parsing with str_getcsv fails on new line使用 str_getcsv 解析 CSV 在新行上失败
【发布时间】:2018-11-23 21:05:19
【问题描述】:

使用 PHP 读取 csv 文件时,CSV 文件中出现换行符问题。一旦逗号后跟换行符,一个单元格的内容将被拆分:

$csv = array_map('str_getcsv', file($file));

first,second,"third,
    more,text","forth"
next,dataset

这将导致:

1) first | second | third
2) more text | forth
3) next | dataset

虽然它应该导致:

1) first | second | third more text | forth
2) next | dataset

这是 str_getcsv 中的错误吗?

【问题讨论】:

  • 不,这不是str_getcsv() 的错误。这是因为您使用file() 来读取文件内容,并且它通过换行符拆分文件。因此,您一次只将一行传递给str_getcsv(),并且无法知道下一行中的特定单元格还有更多内容。
  • 如果我没记错的话,str_getcsv 不允许在列数据中换行,因为它首先假定输入字符串是单行。
  • @vshcherbinin nope,str_getcsv() 可以在列数据中使用换行符:3v4l.org/jBL1F

标签: php csv


【解决方案1】:

不要那样做,使用fgetcsv()。您遇到问题是因为 file() 不关心您文件中的字符串封装。

$fh = fopen('file.csv', 'r');

while( $line = fgetcsv($fh) ) {
    // do a thing
}

fclose($fh);

https://secure.php.net/manual/en/function.fgetcsv.php

如果可以的话,在执行操作之前尽量不要将所有行存储到数组中。您系统的内存使用会感谢您。

【讨论】:

  • 好的 - 不知道为什么我的没用,但考虑得太晚了:-/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 2021-03-02
  • 2016-10-09
  • 2015-01-14
相关资源
最近更新 更多