2013-03-20 74 views
1

我有一個字符串構造成這樣:Tokenising和重建字符串,包含分隔的名稱 - 值對

"01;AA:02;AB:03;AC:" 

有沒有一種方法,使之成爲一個$ _ POST風格格式,其中:

$MyVar['01'] = "AA" 
$MyVar['02'] = "AB" 
$MyVar['03'] = "AC" 

當我完成更改時,我還想以某種方式將其重新打包爲原始字符串格式。 (前導零不破滅必要的,爆炸時,可能不會在那裏)

編輯:增加信息

InevntorySKU;InventoryQTY: 
    086;99:043;99:130;99:131;99:132;99:133;99:134;99:135;99:136;99:137;99:138;99:139;99:140;99:141;99:142;99:143;99: 

回答

8

沒有內置函數來做到這一點,但你可以做到這一點,如下所示:

$MyVar = array(); 
foreach(array_filter(explode(":",$input)) as $i) { 
    list($k,$v) = explode(";",$i,2); 
    $MyVar[$k] = $v; 
} 

你會用相反的過程類似的設置:

$output = ""; 
foreach($MyVar as $k=>$v) $output .= $k.";".$v.":"; 
+0

不錯!感謝Kolink! – WaxyChicken 2013-03-20 23:54:56

+0

問題 - 在您的示例中,提前知道$ K用於召回的內容。 – WaxyChicken 2013-03-21 00:10:25

+0

明白了。再次。 – WaxyChicken 2013-03-21 00:17:26

0

使用preg_matc h_all:

preg_match_all('/\d{2}|[a-z]{2}/i', "01;AA:02;AB:03;AC:", $array); 

for($i=0;$i<count($array[0]);$i+=2){ 
    $myvar[$array[0][$i]] = $array[0][$i+1]; 
} 

print_r($myvar); 

使用使preg_split:

$str = '086;99:043;99:130;99:131;99:132;99:133;99:134;99:135;99:136;99:137;99:138;99:139;99:140;99:141;99:142;99:143;99:'; 
$array = preg_split('/;|:/', $str); 

for($i=0;$i<count($array)-1;$i+=2){ 
    $myvar[$array[$i]] = $array[$i+1]; 
} 

print_r($myvar); 
相關問題