PHP - 键/值对中的拆分字符串

时间:2011-02-07 16:51:48

标签: php string split key-value

我有一个这样的字符串:

  

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有一些更聪明的做法吗?

5 个答案:

答案 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;
    }, []);