PHP解析stdclass对象

PHP解析stdclass对象,php,xml,Php,Xml,我从一个API调用中获得以下输出var_dump。我需要获取数据元素或将它们放入数组中,以便可以将它们用作单个值。我一辈子都想不出怎么做。例如,我需要 有人能帮忙吗 谢谢 object(stdClass)#2 (1) { ["GetPaymentsResult"]=> object(stdClass)#3 (2) { ["schema"]=> string(1754) "<xs:schema xmlns="" xmlns:xs="http://www.w

我从一个API调用中获得以下输出var_dump。我需要获取数据元素或将它们放入数组中,以便可以将它们用作单个值。我一辈子都想不出怎么做。例如,我需要

有人能帮忙吗

谢谢

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>
因为它是一个stdClass对象,所以可以使用对象表示法访问值,并可以使用来解析XML。以下是一个例子:

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

$xml    = new SimpleXmlElement($any);

echo $xml->Payments[0]->Payment->PaymentReference;
我不确定PaymentReference是否正确,但是如果您看到SimpleXml示例,您应该能够非常轻松地理解它。

因为它是一个stdClass对象,您可以使用对象表示法访问值,并可以使用解析XML。以下是一个例子:

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

$xml    = new SimpleXmlElement($any);

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

我不确定PaymentReference是否正确,但是如果您看到SimpleXml示例,您应该能够非常容易地理解它。

您可以使用正则表达式。preg_match_都可以帮助你。例如:

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\u PaymentReference将返回PaymentReference标记的所有值的数组。

您可以使用正则表达式。preg_match_都可以帮助你。例如:

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标记的所有值的数组。

我假设您返回了实际对象,而var_dump只是为了我们的启示?您可以粘贴api调用的实际xml输出吗?您可以粘贴您尝试过但不起作用的内容吗?我假设您返回了实际对象,var_dump只是为了给我们一些启示?你能粘贴api调用的实际xml输出吗?你能粘贴你尝试过的不起作用的东西吗?第二个是在一个响应中有两个PaymentReference元素,这就中断了。至少,你会想要.+?,而不是.+。不过,更好的方法是使用XML解析器。第二种方法是在一个响应中有两个PaymentReference元素,这会中断。至少,你会想要.+?,而不是.+。不过,最好使用XML解析器。不客气,很乐意为您提供帮助。欢迎来到这里,希望我们能继续在这里提供帮助。不客气,很乐意帮忙。欢迎来到这里,希望我们能继续在这里提供帮助。