2012-11-21 95 views
-1

我得到了一段代碼,到目前爲止,當我使用print $ result時,會返回這樣的數據;獲得變量的捲曲結果

ssl_card_number=41**********1111 
ssl_exp_date=0213 
ssl_amount=132.86 
ssl_salestax=0.00 
ssl_invoice_number=5351353519500 
ssl_result=0 
ssl_result_message=APPROVED 
ssl_txn_id=00000000-0000-0000-0000-00000000000 
ssl_approval_code=123456 
ssl_cvv2_response=P 
ssl_avs_response=X 
ssl_account_balance=0.00 
ssl_txn_time=11/21/2012 12:38:20 PM 

這是從查看頁面源代碼。

和頁面本身就說明它:

ssl_card_number=41**********1111 ssl_exp_date=0213 ssl_amount=132.86 ssl_salestax=0.00 ssl_invoice_number=8601353519473 ssl_result=0 ssl_result_message=APPROVED ssl_txn_id=00000000-0000-0000-0000-00000000000 ssl_approval_code=123456 ssl_cvv2_response=P ssl_avs_response=X ssl_account_balance=0.00 ssl_txn_time=11/21/2012 12:37:54 PM 

我需要能夠以更好的方式來處理每一個「鑰匙」,並且不知道如何也許他們爆炸?

回答

1

一個可行的方法:

parse_str(preg_replace('#\s+(?=\w+=)#', '&', $result), $array); 
var_dump($array); 

說明:preg_replace將關閉所有的空格帕拉姆名之前進入「&」的象徵 - 使這個字符串類似常規GET請求的URL。然後parse_str(專門爲解析這樣的URL而創建的函數)將分析該字符串(作爲第一個參數發送),從而創建它的關聯數組。實際上,如果每個param = value字符串從一個新行開始,那麼您甚至不必在此處使用preg_replace; str_replace("\n", '&')應該做的伎倆。

的另一種方法:

$pairs = preg_split('#\s+(?=\w+=)#', $x); 
foreach ($pairs as $pair) { 
    list ($key, $value) = explode('=', $pair, 2); 
    $array[$key] = $value; 
} 

在這裏首先創建的「鍵 - 值對」字符串的數組,然後通過=每個元件分割:第一部分將是密鑰,第二 - 該值。

0

您可以使用@ raina77ow或者你可以使用爆炸報告的正則表達式(風險較大):

<?php 
$tmps = explode("\n",$result); //this gives you each line separate 
foreach($tmps as $tmp){ 
    list($key,$value) = explode('=',$tmp,2); 
    echo $key.' has value '.$value."\n"; 
    //you can even create vars with the "key" if you are sure that they key is a "clean" string: 
    $$key=$value; 
    //or put everything into an array - similar to the regexp 
    $result_array[$key] = $value; 
} 
?>