得到卷曲变量的结果

时间:2012-11-21 17:42:04

标签: php curl

我得到了一段代码,到目前为止,当我使用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

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

2 个答案:

答案 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; 
}
?>