【问题标题】:PHP - split String in Key/Value pairsPHP - 在键/值对中拆分字符串
【发布时间】:2011-06-22 21:02:38
【问题描述】:

我有一个这样的字符串:

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

【问题讨论】:

  • 您的数据来自哪里?你控制它的存储方式吗?它应该是人类可读(和可写)的格式吗?

标签: php string split key-value


【解决方案1】:

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

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

【讨论】:

  • 然而...在 OP 示例中使用explode 和 loop 很可能证明比使用正则表达式解析它更有效。
  • 在对它进行基准测试之前,您永远不会知道这一点。这在很大程度上取决于使用模式。
  • 我只需要使用它。你成功了!
  • 我有 $selectedSoftware = array("AntiVirus ($20)","Norton ($100)"); $n = implode(',',$selectedSoftware); $bool = preg_match_all("/([^,]+) (\$(\d+))/", $n, $matches);它返回 0 不知道为什么,我在这里测试过 phpliveregex.com/p/by8
【解决方案2】:
<?php parse_str(str_replace(", ", "&", "key=value, key2=value2"), $array); ?>

【讨论】:

    【解决方案3】:

    如果您将字符串更改为使用&amp; 而不是, 作为分隔符,则可以使用parse_str()

    【讨论】:

      【解决方案4】:

      如果您可以更改字符串的格式以符合 URL 查询字符串(使用&amp; 而不是,,除此之外,您可以使用parse_str。请务必使用两个参数选项。

      【讨论】:

        【解决方案5】:

        这是一个使用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;
            }, []);
        
        

        【讨论】:

          猜你喜欢
          • 2015-06-19
          • 1970-01-01
          • 2018-11-06
          • 1970-01-01
          • 1970-01-01
          • 2016-01-18
          • 2016-12-13
          • 2021-10-27
          • 1970-01-01
          相关资源
          最近更新 更多