2012-03-22 19 views
2

次の出力(var_dump)がAPI呼び出しから取得されます。データ要素を取得するか、配列に格納して個別の値として使用する必要があります。私は私の人生のためにこれをどうやって動かすことができないのですか?たとえば、私は<PaymentReference>の値を必要としますPHP parse stdclassオブジェクト

誰も助けることができますか?

おかげ

object(stdClass)#2 (1) { 
    ["GetPaymentsResult"]=> 
    object(stdClass)#3 (2) { 
    ["schema"]=> 
    string(1754) "<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="Payments"><xs:element name="Payments" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element name="Payment"><xs:complexType><xs:sequence><xs:element name="PaymentID" type="xs:string" minOccurs="0"/><xs:element name="EzidebitCustomerID" type="xs:int" minOccurs="0"/><xs:element name="YourSystemReference" type="xs:string" minOccurs="0"/><xs:element name="YourGeneralReference" type="xs:string" minOccurs="0"/><xs:element name="CustomerName" type="xs:string" minOccurs="0"/><xs:element name="DebitDate" type="xs:string" minOccurs="0"/><xs:element name="PaymentRef(erence" type="xs:string" minOccurs="0"/><xs:element name="PaymentMethod" type="xs:string" minOccurs="0"/><xs:element name="PaymentSource" type="xs:string" minOccurs="0"/><xs:element name="PaymentAmount" type="xs:decimal" minOccurs="0"/><xs:element name="SetupFee" type="xs:decimal" minOccurs="0"/><xs:element name="TransactionFeeClient" type="xs:decimal" minOccurs="0"/><xs:element name="TransactionFeeCustomer" type="xs:decimal" minOccurs="0"/><xs:element name="SettlementDate" type="xs:string" minOccurs="0"/><xs:element name="InvoiceID" type="xs:int" minOccurs="0"/><xs:element name="PaymentStatus" type="xs:string" minOccurs="0"/><xs:element name="BankReturnCode" type="xs:string" minOccurs="0"/><xs:element name="BankFailedReason" type="xs:string" minOccurs="0"/><xs:element name="BankReceiptID" type="xs:string" minOccurs="0"/><xs:element name="TransactionTime" type="xs:string" minOccurs="0"/></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema>" 
    ["any"]=> 
    string(6888) "<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><Payments xmlns=""><Payment diffgr:id="Payment1" msdata:rowOrder="0"><PaymentID>2012_41393</PaymentID><EzidebitCustomerID>385943</EzidebitCustomerID><YourSystemReference>365</YourSystemReference><YourGeneralReference>365</YourGeneralReference><CustomerName>365</CustomerName><DebitDate>2012-02-20</DebitDate><PaymentReference>10922</PaymentReference><PaymentMethod>DR</PaymentMethod><PaymentSource>SCHEDULED</PaymentSource><PaymentAmount>118.65</PaymentAmount><SetupFee>3.30</SetupFee><TransactionFeeClient>1.10</TransactionFeeClient><TransactionFeeCustomer>0.00</TransactionFeeCustomer> 
+0

私はあなたが実際のオブジェクトを返すと仮定し、var_dumpは私たちの啓蒙のためのものですか? – cHao

+0

APIコールからの実際のxml出力を貼り付けることはできますか? –

+0

あなたが試したことが動作しなかったものを貼り付けることはできますか? – rdlowrey

答えて

0

それはstdClassオブジェクトがあるので、あなたは、オブジェクトの表記法を使用して値にアクセスすることができますし、XMLを解析するSimpleXMLを使用することができます。次に例を示します。

$schema = $apiResult->GetPaymentsResult->schema; 
$any = $apiResult->GetPaymentsResult->any; 

$xml = new SimpleXmlElement($any); 

echo $xml->Payments[0]->Payment->PaymentReference; 

私は​​が正しいかわからないんだけど、あなたはSimpleXMLは例を見れば、あなたはかなり簡単にそれを把握することができるはずです。

+0

は、ありがとう! –

+0

ご協力いただきありがとうございます。そして歓迎しますので、今後も援助を続けてください。 – drew010

0

正規表現を使用できます。 preg_match_allはあなたを助けることができます。たとえば、

function preg_xa($r,$co,$n=1){ 
    $e=array(); 
    preg_match_all($r,$co,$m); 
    for($i=0;$i<count($m[0]);$i++){ 
    $e[]=$m[$n][$i]; 
    } 
    return $e; 
} 

function get_PaymentReference($content){ 
    return preg_xa("/<PaymentReference>(.+)<\/PaymentReference>/simU", $content); 
} 

get_PaymentReferenceは、PaymentReferenceタグのすべての値の配列を返します。

+0

2つ目のPaymentReference要素が1つの応答に含まれていますが、これは壊れます。少なくとも、(。+)ではなく '(。+?)'が必要です。ただし、XMLパーサーを使用する方がよいでしょう。 – cHao

関連する問題