我有存儲在像字符串中的信息:PHP正則表達式分裂與鍵和值
id1:234,id3:23443,id32:andson
我想字符串以一個regex反而使我得到的對分裂,喜歡拆陣列
array(id1=>234, id3=>s3443...)
有沒有辦法做到這一點?
我有存儲在像字符串中的信息:PHP正則表達式分裂與鍵和值
id1:234,id3:23443,id32:andson
我想字符串以一個regex反而使我得到的對分裂,喜歡拆陣列
array(id1=>234, id3=>s3443...)
有沒有辦法做到這一點?
選項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);
您可以簡單地使用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
)
如果你想用正則表達式來做到這一點:
$string = "id1:234,id3:23443,id32:andson";
preg_match_all("/([^,: ]+)\:([^,: ]+)/", $string, $res);
$array = array_combine($res[1], $res[2]);
** + 1 **,既然你是第一個用'regex'回答。 –
謝謝你,第二種選擇是合適的:3 – Sangoku