PHP正则表达式与键和值分开

时间:2014-03-05 08:38:18

标签: php regex arrays string function

我有一个信息存储在如下字符串中:

id1:234,id3:23443,id32:andson

我想用一个分割字符串,但是这样我就可以将数组拆分为数组

array(id1=>234, id3=>s3443...)

有办法吗?

3 个答案:

答案 0 :(得分:4)

您可以简单地使用array_functions。首先使用,爆炸数组,并将该数组作为参数传递给array_map,然后将元素传递给用户定义的函数并进行内部爆炸并将这些值映射作为新数组的key-value对。

<强> One-liner

<?php
$str='id1:234,id3:23443,id32:andson';
array_map(function ($val) use (&$valarr){ $val=explode(':',$val); $valarr[$val[0]]=$val[1];},explode(',',$str));
print_r($valarr);

<强> Using a readable-foreach

<?php
$str='id1:234,id3:23443,id32:andson';
$arr=explode(',',$str);
foreach($arr as &$val)
{
    $val=explode(':',$val);
    $valarr[$val[0]]=$val[1];
}
print_r($valarr);

<强> OUTPUT :

Array
(
    [id1] => 234
    [id3] => 23443
    [id32] => andson
)

答案 1 :(得分:3)

如果你想用正则表达式执行此操作:

$string = "id1:234,id3:23443,id32:andson";
preg_match_all("/([^,: ]+)\:([^,: ]+)/", $string, $res); 
$array = array_combine($res[1], $res[2]);

答案 2 :(得分:2)

选项1:

$string = 'id1:234,id3:23443,id32:andson';
preg_match_all('/([^,:]+)\:([^,:]+)/', $string, $matches);
$result = array_combine($matches[1], $matches[2]);

选项2:

$string = 'id1:234,id3:23443,id32:andson';
parse_str(str_replace([':', ','], ['=', '&'], $string), $result);