例如,我的字符串可能如下所示:
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_]*))
这是有效的。它查找:
之前和:
之后的所有字符串,但我不知道如何解析它,将其放入所需格式的数组中。
您可以先在空格上使用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"]);
上面的方法有效,但在我看来太难阅读了。使用以下方法可以更容易、更高效地完成此操作,无需进行三次额外的函数调用。
$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];
}