如何将具有特殊字符的字符串转换为数组 php

How to convert string with special character as array php

我有一个像下面这样的字符串。

"|dm:12|em:.25|fm:10|wm:85|de:143|qty:1"

如何转换为键值对?

代码

foreach(array_filter(explode("|", "|dm:12|em:.25|fm:10|wm:85|de:143|qty:1")) as $ListItem){
    $Item = explode(":", $ListItem);
    $KVP[$Item[0]] = isset($Item[1]) ? $Item[1] : null;
}

var_dump($KVP);

输出

array(6) {
  'dm' =>
  string(2) "12"
  'em' =>
  string(3) ".25"
  'fm' =>
  string(2) "10"
  'wm' =>
  string(2) "85"
  'de' =>
  string(3) "143"
  'qty' =>
  string(1) "1"
}

嗯,我很无聊。只需将 | 替换为 & 并将 : 替换为 = 即可获取要解析为数组的查询字符串:

parse_str(str_replace(['|', ':'], ['&', '='], $string), $result);

或者您可以捕捉您想要的片段并将它们组合起来:

preg_match_all('/\|([^:]+):([^|]+)/', $string, $matches);
$result = array_combine($matches[1], $matches[2]);
  • 匹配一个|
  • ([^:]+) 匹配并捕获任何非 :
  • 的内容
  • 匹配:
  • ([^|]+) 匹配并捕获任何非 |
  • 的内容