如何解析包含逗号的值的 CSV?
假设您有一个如下所示的字符串:
$str = 'one value, two value, "three, cool value", four value';
您如何将其设为如下数组:(
$arr = array('one value', 'two value', 'three, cool value', 'four value');
这就是关于 CSV 和包含逗号并因此被双引号括起来的值的全部内容。)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
如果您确实是从字符串解析它,请使用 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.
您可以使用
str_getcsv
结果:
You can use
str_getcsv
Results:
假设您使用的是 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.
str_getcsv() 使用此函数,并将其封装为
'\ "'
。看起来像这样:
$csv = str_getcsv($csvstring,',','\"');
str_getcsv() use this function with enclosure as
'\"'
.It looks like this:
$csv = str_getcsv($csvstring,',','\"');
将
str_getcsv
与array_map
和trim
一起使用正是可以实现这一点。您可以使用str_getcsv
将项目分解为数组,然后使用array_map
和trim
修剪掉每个项目中的空白。PHP → JSON 格式
不带 TRIM
这会产生:
带 TRIM
这会产生:
PHP 格式
要使用 JSON 格式的最终结果,请像我上面那样使用
echo json_encode(…)
。否则,如果您想继续将其用作 PHP 数组,请使用不带 json_encode 的var_dump(…)
。您可以像这里一样执行此操作(包括trim()
):这将产生:
这是正确的 PHP 格式,PHP 相当于:
Using
str_getcsv
together witharray_map
andtrim
does precisely this. You usestr_getcsv
to break the items into an array, and thenarray_map
andtrim
to trim off the whitespace from each item.PHP → JSON Format
WITHOUT TRIM
This produces:
WITH TRIM
This produces:
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 usevar_dump(…)
without json_encode. You can do it like here (includingtrim()
):This produces:
This is correct PHP format, the PHP equivalent of:
您可以查看 fgetcsv。
You could look around at fgetcsv.
有两种方法。
如果您要引用条目,请引用每个条目。然后用“,”(带引号)分解字符串。
在解析之前将逗号替换为不常见的内容。像 {|}
There are two ways.
If you're going to quote entries, quote every entries. Then explode the string with "," (with quotes).
Replace commas with something uncommon before parsing. Like {|}