Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将键/值字符串转换为关联数组_Php_Arrays_Regex_String - Fatal编程技术网

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

Php 将键/值字符串转换为关联数组,php,arrays,regex,string,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)以

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

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_]*))
这很有效。它会找到
之前和之后的所有字符串,但我不知道如何解析它以将其放入所需格式的数组中。

您可以只
分解()
您的字符串首先在空格上,然后在冒号上使用
数组映射()
每个值。之后,只需使用
array\u 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"]);
preg_match_all(“/(?P\w+):(?P[\w@])/”,$str,$m);
$result=array_combine($m[“key”],$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];
}

完美的以你为答案。我忘了
explode()
@scottplunket不客气。我还添加了一个解决方案,说明如何使用正则表达式来实现它。