-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

我需要能够以更好的方式处理每个“钥匙”并且不知道如何爆炸它们?

4

2 回答 2

1

一种可能的方法:

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

说明:preg_replace将参数名称之前的所有空格转换为“&”符号 - 使此字符串类似于常规 GET 请求 url。然后parse_str(专门为解析此类 url 而创建的函数)将解析这个字符串(作为第一个参数发送),创建一个关联数组。

事实上,你甚至不必在这里使用 preg_replace,如果每个 param=value 字符串都从新行开始;str_replace("\n", '&')应该做的伎俩。

另一种方法:

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

在这里,您首先创建一个“键值对”字符串数组,然后将每个元素拆分为=:第一部分是键,第二部分是值。

于 2012-11-21T17:49:13.707 回答
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; 
}
?>
于 2012-11-21T17:56:08.710 回答