2012-03-22 4 views
2

API 호출에서 다음 출력 (var_dump)을받습니다. 데이터 요소를 가져와 배열로 가져와 개별 값으로 사용할 수 있어야합니다. 나는이 일을하는 삶을 살아갈 수 없다. 예를 들어 <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를 사용할 수 있습니다. 나는 PaymentReference가 정확한지 모르겠지만, 당신이 SimpleXML을 예제를 보면 당신은 아주 쉽게 알아낼 수있을 것

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

$xml = new SimpleXmlElement($any); 

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

예를 들면 다음과 같습니다.

+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

두 번째에는 한 응답에 두 개의 PaymentReference 요소가 있습니다. 최소한, 당신은 (. +)가 아니라'(. +?)'를 원할 것입니다. XML 구문 분석기를 사용하는 것이 더 좋습니다. – cHao