-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

考えられるアプローチの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; 
}

ここでは、最初に「キーと値のペア」文字列の配列を作成し、次に各要素を=次のように分割します。最初の部分がキー、2番目の部分が値になります。

于 2012-11-21T17:49:13.707 に答える
0

@ raina77owによって報告された正規表現を使用するか、explodes(riskier)を使用できます。

<?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 に答える