我得到了一段代码,到目前为止,当我使用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
我需要能够以更好的方式处理每个“键”并且不知道如何爆炸它们吗?
答案 0 :(得分:1)
一种可能的方法:
parse_str(preg_replace('#\s+(?=\w+=)#', '&', $result), $array);
var_dump($array);
说明:preg_replace
会将参数名称之前的所有空格转换为“&” symbol - 使此字符串类似于常规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;
}
这里首先创建一个'键值对'字符串数组,然后将每个元素拆分为=
:第一部分是键,第二部分是值。
答案 1 :(得分: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;
}
?>