【问题标题】:Separate string by comma and convert to associative array用逗号分隔字符串并转换为关联数组
【发布时间】:2023-01-23 18:30:10
【问题描述】:

我有一个字符串"key1=value1,key2=value2,...,key-n=value-n"

在不知道 n 是什么的情况下,如何将字符串解析为关联数组,例如:

$result = ["key1" => "value1", "key2" => "value2",...,"key-n" => "value-n"];

【问题讨论】:

    标签: php string


    【解决方案1】:

    在您的示例中,您似乎只想提取和分隔键和值。

    $result = [];
    foreach (explode(',', $string) as $pair) {
      list($key, $value) = explode('=', $pair);
      $result[$key] = $value;
    }
    

    如果你需要抛出一些正则表达式魔法来确保它符合特定的语法。这是一个例子:

    $result = [];
    foreach (explode(',', $string) as $pair) {
      if (!preg_match('#^(.+-?.*)=(.+-?.*)$#', $pair, $matches)) continue;
      $result[$matches[1]] = $matches[2];
    }
    

    【讨论】:

    • 一个工作简单的实现。非常感谢。
    • 当且仅当所有字段都没有逗号时,这是一个有效的解决方案。考虑$csv = "last, first","1234 N Main St., New York, NY"
    【解决方案2】:

    您可以将字符串解析为 CSV,然后在 = 符号上展开。

    $array = str_getcsv('key1=value1,key2=value2,...,key-n=value-n');
    $newarray = array();
    foreach($array as $pairs){
        if(strpos($pairs, '=') !== FALSE){
            list($key, $value) = explode('=', $pairs);
            $newarray[$key] = $value;
        } else {
            //no value present, what to do?
        }
    }
    print_r($newarray);
    

    https://3v4l.org/hkYil

    【讨论】:

    • 你能告诉我 explode 和 str_getcsv 之间的区别吗?
    • str_getcsv 用于解析 CSV,php.net/manual/en/function.str-getcsv.php 也可用于其他带分隔符的字符串。您可以为数据定义定界符、封闭字符以及转义字符。爆炸不能做那些事情。
    • 非常感谢,但是我只需要一个更简单的解决方案,所以我会接受蒂姆的回答。
    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多