2012-03-14 9 views
1

私はこれに取り組んできましたが、まだ解決策は見つかりませんでした。 ssl_card_number = 35 * ** * 0000 ssl_exp_date = 1212 ssl_amount = 33.55 ssl_invoice_number = 0 ssl_description = ssl_company =いくつかの会社ssl_first_name =ジョン:私は連想配列(PHP)プレーンテキストをPHPの連想配列に解析する

結果に、このような文字列を解析する必要がありますssl_last_name =応える ssl_avs_address =テスト聖ssl_address2 = ssl_city =サンディssl_state =ユタ ssl_avs_zip = 84075 ssl_country =米国= ssl_phone [email protected] ssl_result = 0 ssl_result_message =承認 ssl_txn_id = 00000000-0000-0000 -0000-00000000000 ssl_approval_code = 123456 ssl_c vv2_response = P ssl_avs_response = X ssl_account_balance = 0.00 ssl_txn_timeは= 3月14日/ 2012年の6時58分27秒PM

この文字列は、マーチャント・サービスから来ているものである(1は、上記の偽のデータが含まれている)ので、私は、解析する必要がありますそれアウトし、私はそれを達成することができますどのようにこの

$card_number = $parsed["ssl_card_number"];

のような値に達しますか?注:すべてのキーはssl_で始まり、多分どこかで役に立つかもしれません。

+0

'parse_str'関数を試しましたか? (http://php.net/manual/en/function.parse-str.php)それでもうまくいかなければ、常に複数の 'explode'を使う可能性があります。 – summea

+1

空白の問題のために爆発が機能しないことがあります。正規表現を使用するとここで動作しますが、私は現時点で有効なものを提供できません。文字列を繰り返してssl_部分文字列を探し、次のssl_が出現するまでコピーします。 – arvidkahl

+0

あなたは "ssl_"の試合でそれを分割しようとしましたか? – Hidde

答えて

2
$string = 'ssl_card_number=35****0000 ssl_exp_date=1212 ssl_amount=33.55 ssl_invoice_number=0 ssl_description= ssl_company=Some Company ssl_first_name=John ssl_last_name=Cater ssl_avs_address=Test St. ssl_address2= ssl_city=Sandy ssl_state=Utah ssl_avs_zip=84075 ssl_country=United States ssl_phone= [email protected] 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=03/14/2012 06:58:27 PM'; 

$result = array(); 
$arr = preg_split('/\s+ssl_/', $string); 
foreach ($arr as $l) { 
     $tmp = explode('=', $l, 2); 
     $result['ssl_' . $tmp[0]] = $tmp[1]; 
} 
print_r($result); 
+0

'split()'は廃止されましたが、 'explode()'はうまく動作し、あなたは私の人生を比喩的に保存しました。どうもありがとう。 – Tarik

+0

ok申し訳ありませんが、それを修正し、さらに3番目のパラメータを追加しました – strkol