2011-02-07 77 views
16

我有一个这样的字符串:PHP - 以键/值对分割字符串

键=值,键2 =值

,我想将它解析为这样的事情:

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

你的数据来自哪里?你控制它的存储方式吗?它应该是一种人类可读(可写)格式? – 2011-02-07 16:54:35

回答

18

如果你不介意使用正则表达式...

$str = "key=value, key2=value2"; 
preg_match_all("/([^,= ]+)=([^,= ]+)/", $str, $r); 
$result = array_combine($r[1], $r[2]); 
var_dump($result); 
+0

然而你击败了我 – JPelletier 2011-02-07 16:59:31

11

,您可以使用parse_str()

+2

`parse_str`也是URL解码。 – aaz 2011-02-08 20:29:06

2

如果你可以改变(&而不是,,其中可以使用parse_str。请确保使用两个参数选项。

13
<?php parse_str(str_replace(", ", "&", "key=value, key2=value2"), $array); ?>