2011-08-01 16 views
0

SOAPに関しては私は無知です。soap result to variable、PHP

<?php 
// define the SOAP client using the url for the service 
$client = new soapclient('http://www.xignite.com/xMetals.asmx?WSDL', array('trace' => 1)); 

// create an array of parameters 
$param = array(
      'Type' => "XAU", 
      'Currency' => "USD"); 



// call the service, passing the parameters and the name of the operation 
$result = $client->GetLastRealTimeMetalQuote($param); 
// assess the results 
if (is_soap_fault($result)) { 
echo '<h2>Fault</h2><pre>'; 
print_r($result); 
echo '</pre>'; 
} else { 
echo '<h2>Result</h2><pre>'; 
print_r($result); 
echo '</pre>'; 
} 

?> 

と私は私が手にスクリプトを実行します:

Result 

stdClass Object 
(
[GetLastRealTimeMetalQuoteResult] => stdClass Object 
    (
     [Outcome] => Success 
     [Identity] => IP 
     [Delay] => 0.006 
     [Symbol] => XAUUSDO 
     [Type] => XAU 
     [Currency] => USD 
     [Date] => 8/1/2011 
     [Time] => 11:18:48 PM 
     [Rate] => 1618.88500977 
     [Bid] => 1618.55004883 
     [BidTime] => 11:18:48 PM 
     [Ask] => 1619.2199707 
     [AskTime] => 11:18:48 PM 
    ) 

) 

私は結果の残りの部分から[入札]を析出し、それを保存するにはどうすればよいの私は、Webサービス呼び出しを行っております変数。

それでも、配列を引き出すにはどうすればよいですか?

+0

ARRAYではなくOBJECTを返すことに注意してください。私はこれらがすべて混ざり合っていることに気づいた。最初のケースでは単一のオブジェクトが返されますが、2番目のケースでは複数のオブジェクトが返されると悪化します。あなたはそれぞれの状況に応じて別々のルーチンが必要です。 –

答えて

1

はstdClassのオブジェクトはあなたを混同してはいけない - これは単にオブジェクトの表記法で表現されたアレイです。したがって、$result['GetLastRealTimeMetalQuoteResult']['Bid'](通常の連想配列)は$result->GetLastRealTimeMetalQuoteResult->Bidになります。同じ値ですが、異なる表記です。

値がSOAPライブラリが実行するオブジェクトに型キャストされると、stdClassオブジェクトが取得されます。参照:stdClassのに関するいくつかの詳細についてはhttp://php.net/manual/en/reserved.classes.phpを、この記事をチェックアウト:http://krisjordan.com/dynamic-properties-in-php-with-stdclass

アレイにはstdClassを変換したい場合は、残念ながらあなたは少しの機能を使用する必要があります:

function objToArray($obj=false) { 
    if (is_object($obj)) 
     $obj= get_object_vars($obj); 
    if (is_array($obj)) { 
     return array_map(__FUNCTION__, $obj); 
    } else { 
     return $obj; 
    } 
} 
2
$somevar = $result->GetLastRealTimeMetalQuoteResult->Bid;