假设你有一个字符串如下:
$str = 'one value, two value, "three, cool value", four value';
如何使它成为一个数组如下:
$arr = array('one value', 'two value', 'three, cool value', 'four value');
(这些都是关于CSV和包含逗号的值,因此是双引号。)
答案 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_getcsv
与 array_map
和 trim
一起使用正好可以做到这一点。您使用 str_getcsv
将项目分解为一个数组,然后使用 array_map
和 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"]
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"]
要使用 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)
有两种方式。
如果您要引用条目,请引用每个条目。然后用“,”(带引号)爆炸字符串。
在解析之前用逗号替换逗号。像{|}