将逗号分隔的 key=value 表达式字符串转换为关联数组

问题描述 投票:0回答:5

我有一个这样的字符串:

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 更智能地做到这一点,对吗?

php string key-value associative-array text-parsing
5个回答
23
投票

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

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

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

11
投票

如果您将字符串更改为使用

&
而不是
,
作为分隔符,则可以使用
parse_str()


2
投票

如果您可以更改字符串的格式以符合 URL 查询字符串(使用

&
而不是
,
等,您可以使用
parse_str
。请务必使用两个参数选项。


1
投票

这是一个使用

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.