我有一个这样的字符串:
key = value,key2 = value2
我想把它解析成这样的东西:
array(
"key" => "value",
"key2" => "value2"
)
我可以做类似
的事情$parts = explode(",", $string)
$parts = array_map("trim", $parts);
foreach($parts as $currentPart)
{
list($key, $value) = explode("=", $currentPart);
$keyValues[$key] = $value;
}
但这似乎很荒谬。对PHP有一些更聪明的做法吗?
答案 0 :(得分:19)
如果您不介意使用正则表达式...
$str = "key=value, key2=value2";
preg_match_all("/([^,= ]+)=([^,= ]+)/", $str, $r);
$result = array_combine($r[1], $r[2]);
var_dump($result);
答案 1 :(得分:13)
<?php parse_str(str_replace(", ", "&", "key=value, key2=value2"), $array); ?>
答案 2 :(得分:11)
如果您将字符串更改为使用&
而不是,
作为分隔符,则可以使用parse_str()
答案 3 :(得分:2)
如果您可以更改字符串的格式以符合URL查询字符串(使用&
而不是,
,除其他外,您可以使用parse_str
。请务必使用使用两个参数选项。
答案 4 :(得分:0)
这是一个使用 array_reduce
格式的单一命令解决方案,以多行格式以提高可读性:
<?php
$str = "key=value, key2=value2";
$result = array_reduce(
explode(',', $str),
function ($carry, $kvp) {
list($key, $value)=explode('=', $kvp);
$carry[trim($key)]=trim($value);
return $carry;
}, []);