我有一个这样的字符串:
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 更智能地做到这一点,对吗?
如果您不介意使用正则表达式...
$str = "key=value, key2=value2";
preg_match_all("/([^,= ]+)=([^,= ]+)/", $str, $r);
$result = array_combine($r[1], $r[2]);
var_dump($result);
<?php parse_str(str_replace(", ", "&", "key=value, key2=value2"), $array); ?>
如果您可以更改字符串的格式以符合 URL 查询字符串(使用
&
而不是 ,
等,您可以使用 parse_str
。请务必使用两个参数选项。
这是一个使用
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;
}, []);