如何使用包含逗号的值解析CSV?

时间:2010-09-01 07:10:47

标签: php csv

假设你有一个字符串如下:

$str = 'one value, two value, "three, cool value", four value';

如何使它成为一个数组如下:

$arr = array('one value', 'two value', 'three, cool value', 'four value');

(这些都是关于CSV和包含逗号的值,因此是双引号。)

7 个答案:

答案 0 :(得分:8)

如果您真的要从字符串中解析它,请使用str_getcsv

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

答案 1 :(得分: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 :(得分:2)

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

答案 3 :(得分:1)

你可以看看fgetcsv

答案 4 :(得分:0)

str_getcsv()将此功能与'\"'一起使用。

它看起来像这样:$csv = str_getcsv($csvstring,',','\"');

答案 5 :(得分:0)

str_getcsvarray_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"]

带修剪

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"]

答案 6 :(得分:-1)

有两种方式。

  1. 如果您要引用条目,请引用每个条目。然后用“,”(带引号)爆炸字符串。

  2. 在解析之前用逗号替换逗号。像{|}