2014-03-31 114 views
-4

陣列我有字符串是:爆炸的字符串與鍵=>值

$string = '200AUD, 150USD, 80GBP, 1250000VND'; 

如何從$字符串轉換爲與關鍵=>值的數組。

Key: AUD => Value 200 
Key: USD => Value 150 
Key: GBP => 80 
Key: VND => 1250000 

更新時間:

@馬克·貝克我的php版本是5.4,所以我不能測試你的代碼,感謝

@Aleatoric 我使用此代碼,但數組返回一些空格鍵和值的字符:

   Array 
(
    [ CHF] => 130 
    [ GBP] => 80 
    [ USD] => 125 
    [ DKK] => 750 
    [ PLN] => 400 
    [ CZK] => 2500 
    [ YTL] => 175 
    [ BGN] => 175 
    [ RUB] => 4000 
    [ RON] => 400 
    [ SEK] => 1000 
) 

我已經使用trim()去除所有空間,但是你能告訴我最好的這個問題的想法,而不使用trim()函數?

回答

3

你將有爆炸的字符串先用:

$array1 = explode(',', $string); 

,然後遍歷與foreach循環的要素分割字符串,並把它們放到一個關聯數組:

$array2 = array(); 
foreach($array1 as $string){ 
    $currency = trim(preg_replace("/[0-9]+/", "", $string)); 
    $value = trim(preg_replace("/[a-zA-Z]+/", "", $string)); 
    $array2[$currency] = $value; 
} 
+0

我更新了我的問題,請指教。 – JohnTang

+0

幾個修復程序。首先,刪除初始字符串中的空格。所以你會有$ string ='200AUD,150USD,80GBP,1250000VND';或者,使用explode(「,」,$ string)包含空格。還有其他方法可以做到這一點,但老實說,這是修剪的用例。使用trim()有什麼問題? – WinterMute

+0

在輸入可能包含或不包含額外空白的情況下,修剪也會更好。其他方法將失敗,您將不得不對輸入應用附加檢查以確保其符合。修剪是你最好的選擇,我相應地更新了我的答案。 – WinterMute

0

需要PHP> = 5.5

$string = '200AUD, 150USD, 80GBP, 1250000VND'; 

$currencyArray = array_column(
    array_map(
     function ($value) { 
      return sscanf($value, '%d%s'); 
     }, 
     explode(',', $string) 
    ), 
    0, 
    1 
); 

var_dump($currencyArray);