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

发布于 2024-09-17 08:38:52 字数 278 浏览 7 评论 0 原文

假设您有一个如下所示的字符串:

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

您如何将其设为如下数组:(

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

这就是关于 CSV 和包含逗号并因此被双引号括起来的值的全部内容。)

Assuming you have a string as follows:

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

How would you make it an array as follows:

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

(That's all about CSV and values that contain a comma and thus are double quoted.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

秋叶绚丽 2024-09-24 08:38:52

如果您确实是从字符串解析它,请使用 str_getcsv

如果您要从文件中读取数据,请使用 fgetcsv

If you are really parsing it from a string, use str_getcsv.

If you are reading data from a file, use fgetcsv.

初心未许 2024-09-24 08:38:52

您可以使用 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"
}

You can use str_getcsv

$str = 'one value, two value, "three, cool value", four value';
var_dump(str_getcsv($str));                                     

Results:

array(4) {
  [0]=>
  string(9) "one value"
  [1]=>
  string(9) "two value"
  [2]=>
  string(17) "three, cool value"
  [3]=>
  string(10) "four value"
}
§对你不离不弃 2024-09-24 08:38:52

假设您使用的是 5.3.0 或更高版本,请使用 str_getcsv。如果您使用的是较旧版本的 PHP,请尝试使用 fgetcsv 以及 此处。最后一个示例可以在此键盘中找到。

Assuming you're using 5.3.0 or newer, use str_getcsv. If you're using an older version of PHP, try fgetcsv with the 'var' stream wrapper from here. An example of the last can be found at this codepad.

梦醒灬来后我 2024-09-24 08:38:52

str_getcsv() 使用此函数,并将其封装为 '\ "'

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

str_getcsv() use this function with enclosure as '\"'.

It looks like this: $csv = str_getcsv($csvstring,',','\"');

瀟灑尐姊 2024-09-24 08:38:52

str_getcsvarray_maptrim 一起使用正是可以实现这一点。您可以使用 str_getcsv 将项目分解为数组,然后使用 array_maptrim 修剪掉每个项目中的空白。

PHP → JSON 格式

不带 TRIM

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

Using str_getcsv together with array_map and trim does precisely this. You use str_getcsv to break the items into an array, and then array_map and trim to trim off the whitespace from each item.

PHP → JSON Format

WITHOUT TRIM

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

This produces:

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

WITH TRIM

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

This produces:

["one value","two value","three, cool value","four value"]

PHP Format

To use the final result in JSON format, use echo json_encode(…) as I did above. Otherwise, if you would like to continue using this as a PHP array, then use var_dump(…) without json_encode. You can do it like here (including trim()):

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

This produces:

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

This is correct PHP format, the PHP equivalent of:

["one value","two value","three, cool value","four value"]
潦草背影 2024-09-24 08:38:52

您可以查看 fgetcsv

You could look around at fgetcsv.

水波映月 2024-09-24 08:38:52

有两种方法。

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

  2. 在解析之前将逗号替换为不常见的内容。像 {|}

There are two ways.

  1. If you're going to quote entries, quote every entries. Then explode the string with "," (with quotes).

  2. Replace commas with something uncommon before parsing. Like {|}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文