如何解析包含逗号的CSV文件?

4
假设你有一个字符串如下:
$str = 'one value, two value, "three, cool value", four value';

如何将它转换为以下数组形式:
$arr = array('one value', 'two value', 'three, cool value', 'four value');

(这就是关于CSV和包含逗号的值以及双引号的全部内容。)
7个回答

9

如果您正在从字符串中解析数据,请使用str_getcsv函数。

如果您正在从文件中读取数据,请使用fgetcsv函数。


请注意,如果您使用的是 PHP < 5.3,并且需要从字符串中读取它,则可以使用“var”流包装器。请参阅http://codepad.org/XepyeDSd。 - TML

5
你可以使用 str_getcsv 函数。
$str = 'one value, two value, "three, cool value", four value';
var_dump(str_getcsv($str));                                     

结果:

array(4) {
  [0]=>
  string(9) "one value"
  [1]=>
  string(9) "two value"
  [2]=>
  string(17) "three, cool value"
  [3]=>
  string(10) "four value"
}

2
假设您使用的是5.3.0或更新版本,请使用str_getcsv。如果您使用的是旧版PHP,请尝试使用here中的'var'流包装器和fgetcsv。最后一个示例可以在this codepad中找到。

1

str_getcsv()使用这个函数时要加上封闭标记'\"'

代码如下:$csv = str_getcsv($csvstring,',','\"');


1
使用 str_getcsv 结合 array_maptrim 可以精确地实现这一功能。您可以使用 str_getcsv 将项目拆分为数组,然后使用 array_maptrim 从每个项目中修剪掉空格。

PHP → JSON 格式

不使用修剪

echo json_encode(str_getcsv('one value, two value, "three, cool value", four value'));

这个产生:
// some array items include extra whitespace without `trim()`
["one value"," two value","three, cool value"," four value"]

带有 TRIM

echo json_encode(array_map('trim', str_getcsv('one value, two value, "three, cool value", four value')));

这个产生:
["one value","two value","three, cool value","four value"]

PHP格式化

如果要使用JSON格式的最终结果,请像上面一样使用echo json_encode(…)。否则,如果您想继续将其作为PHP数组使用,则使用不带json_encode的var_dump(…)。您可以像这样执行(包括trim()):

var_dump(array_map('trim', str_getcsv('one value, two value, "three, cool value", four value')));

这句话的意思是:这会产生:
array(4) {
  [0]=>
  string(9) "one value"
  [1]=>
  string(9) "two value"
  [2]=>
  string(17) "three, cool value"
  [3]=>
  string(10) "four value"
}

这是正确的PHP格式,相当于以下内容的PHP版本:
["one value","two value","three, cool value","four value"]

0

-1

有两种方法。

  1. 如果要引用条目,请引用每个条目。然后使用 ","(带引号)拆分字符串。

  2. 在解析之前将逗号替换为不常见的字符,例如 {|}


1
不需要这样做,实际上fgetcsv()和str_getcsv()都可以很好地处理所示的引用风格。 - TML

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接