2014-03-05 40 views
0

我有存儲在像字符串中的信息:PHP正則表達式分裂與鍵和值

id1:234,id3:23443,id32:andson 

我想字符串以一個反而使我得到的對分裂,喜歡拆陣列

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

有沒有辦法做到這一點?

回答

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); 
+0

謝謝你,第二種選擇是合適的:3 – Sangoku

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 
) 
3

如果你想用正則表達式來做到這一點:

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

** + 1 **,既然你是第一個用'regex'回答。 –