将键/值字符串转换为关联数组

时间:2016-04-02 01:15:32

标签: php arrays regex string

例如,我的字符串可能如下所示:

first_name:Tom last_name:Jones email:tom@somedomain.com

我希望我的数组看起来如下:

Array (
  ['first_name'] => 'Tom',
  ['last_name'] => 'Jones',
  ['email'] => 'tom@somedomain.com'
)

然后,它将用于根据列和值搜索数据库。所以我首先需要检索密钥(例如first_name)和值(如Tom)进行搜索。

我有以下正则表达式:

((?:[a-z][a-z0-9_]*))

这很有效。它在:之前和:之后找到所有字符串,但我无法弄清楚如何解析它以将其放入我需要的格式数组中。

2 个答案:

答案 0 :(得分:1)

上述方法有效但我认为过于难以阅读。使用以下方法可以更轻松有效地执行此操作,无需进行三次额外的函数调用。

$user_info = 'first_name:Tom last_name:Jones email:tom@somedomain.com';

$user = array();
foreach (explode(' ', $user_info) as $property) {
    $part = explode(':', $property);
    $user[$part[0]] = $part[1];
}

答案 1 :(得分:-1)

您可以先在空格中explode()使用字符串,然后在冒号上使用array_map()每个值。之后,只需使用array_column()即可获得键和值:

$result = array_column(array_map(function($v){
    return explode(":", $v);
}, explode(" ", $str)), 1, 0);

您也可以在开始时使用正则表达式并使用命名捕获组,例如

preg_match_all("/(?P<keys>\w+):(?P<values>[\w@]+)/", $str, $m);
$result = array_combine($m["keys"], $m["values"]);