Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP SimpleXML对象属性以数组形式存在,但直接访问时会变成对象_Php_Arrays_Object_Simplexml - Fatal编程技术网

PHP SimpleXML对象属性以数组形式存在,但直接访问时会变成对象

PHP SimpleXML对象属性以数组形式存在,但直接访问时会变成对象,php,arrays,object,simplexml,Php,Arrays,Object,Simplexml,我在尝试解析Authorize.Net的CIM API的响应时遇到了一个奇怪的问题。PHP使用API的响应创建SimpleXML对象。对象的属性报告为数组(因为它包含两个唯一的索引),但是当直接访问该属性时,print_r()、gettype()和is_array()都将其报告/视为对象,而不是数组 print_r($parsedresponse); foreach($profile as $prof){ print_r($prof); foreach($prof->pay

我在尝试解析Authorize.Net的CIM API的响应时遇到了一个奇怪的问题。PHP使用API的响应创建SimpleXML对象。对象的属性报告为数组(因为它包含两个唯一的索引),但是当直接访问该属性时,print_r()、gettype()和is_array()都将其报告/视为对象,而不是数组

print_r($parsedresponse);
foreach($profile as $prof){
    print_r($prof);
    foreach($prof->paymentProfiles as $pProf){
        print_r($pProf);
    }
}
下面是PHP代码:

print_r($parsedresponse);
print_r($parsedresponse->profile);
print_r($parsedresponse->profile->paymentProfiles);
print_r($parsedresponse->profile->paymentProfiles[1])
生成以下输出: SimpleXMLElement对象

(

    [messages] => SimpleXMLElement Object

        (

            [resultCode] => Ok

            [message] => SimpleXMLElement Object

                (

                    [code] => I00001

                    [text] => Successful.

                )

        )
    [profile] => SimpleXMLElement Object

        (

            [merchantCustomerId] => 1

            [description] => Customer Profile for Store Code MC Created 11/20/13

            [email] => email@email.com

            [customerProfileId] => 11111111

            [paymentProfiles] => Array

                (

                    [0] => SimpleXMLElement Object

                        (

                            [customerType] => individual

                            [billTo] => SimpleXMLElement Object

                                (

                                    [firstName] => Test

                                    [lastName] => Test

                                    [company] => Company Name

                                    [address] => 1234 Test St

                                    [city] => Testlyvania
                                    [state] => OH

                                    [zip] => 44720

                                    [country] => United States

                                    [phoneNumber] => 123-456-7890

                                    [faxNumber] => SimpleXMLElement Object

                                        (

                                        )

                                )

                            [customerPaymentProfileId] => 22222222

                            [payment] => SimpleXMLElement Object

                                (

                                    [creditCard] => SimpleXMLElement Object

                                        (

                                            [cardNumber] => XXXX1111

                                            [expirationDate] => XXXX

                                        )

                                )

                        )

                    [1] => SimpleXMLElement Object

                        (

                            [customerType] => individual

                            [billTo] => SimpleXMLElement Object

                                (

                                    [firstName] => Test

                                    [lastName] => Test

                                    [company] => SimpleXMLElement Object
                                        (
                                        )

                                    [address] => 1234 Test St

                                    [city] => Testlyvania

                                    [state] => OH

                                    [zip] => 44720

                                    [country] => United States

                                    [phoneNumber] => 1234567890

                                    [faxNumber] => 123-456-7890
                                )

                            [customerPaymentProfileId] => 33333333

                            [payment] => SimpleXMLElement Object

                                (

                                    [creditCard] => SimpleXMLElement Object

                                        (

                                            [cardNumber] => XXXX0002

                                            [expirationDate] => XXXX

                                        )

                                )


                        )

                )

            [shipToList] => Array
                (

                    [0] => SimpleXMLElement Object

                        (

                            [firstName] => Test

                            [lastName] => Test

                            [company] => Company Name

                            [address] => 1234 Test St

                            [city] => Testlyvania

                            [state] => OH

                            [zip] => 44720

                            [country] => United States

                            [phoneNumber] => 123-456-7890

                            [faxNumber] => SimpleXMLElement Object

                                (

                                )

                            [customerAddressId] => 44444444
                        )

                    [1] => SimpleXMLElement Object
                        (

                            [firstName] => Test

                            [lastName] => Test

                            [company] => SimpleXMLElement Object

                                (

                                )

                            [address] => 1234 Test St

                            [city] => Testlyvania

                            [state] => OH

                            [zip] => 44720

                            [country] => United States

                            [phoneNumber] => 1234567890

                            [faxNumber] => 123-456-7890

                            [customerAddressId] => 55555555
                        )

                )

        )

)


SimpleXMLElement Object

(

    [merchantCustomerId] => 1

    [description] => Customer Profile for Store Code MC Created 11/20/13

    [email] => email@email.com

    [customerProfileId] => 11111111

    [paymentProfiles] => Array

        (

            [0] => SimpleXMLElement Object

                (

                    [customerType] => individual

                    [billTo] => SimpleXMLElement Object

                        (

                            [firstName] => Test

                            [lastName] => Test

                            [company] => Company Name

                            [address] => 1234 Test St

                            [city] => Testlyvania

                            [state] => OH

                            [zip] => 44720

                            [country] => United States

                            [phoneNumber] => 123-456-7890

                            [faxNumber] => SimpleXMLElement Object

                                (

                                )

                        )

                    [customerPaymentProfileId] => 22222222

                    [payment] => SimpleXMLElement Object

                        (

                            [creditCard] => SimpleXMLElement Object

                                (

                                    [cardNumber] => XXXX1111

                                    [expirationDate] => XXXX
                                )

                        )

                )

            [1] => SimpleXMLElement Object

                (

                    [customerType] => individual

                    [billTo] => SimpleXMLElement Object

                        (

                            [firstName] => Test

                            [lastName] => Test

                            [company] => SimpleXMLElement Object

                                (

                                )

                            [address] => 1234 Test St

                            [city] => Testlyvania

                            [state] => OH

                            [zip] => 44720

                            [country] => United States

                            [phoneNumber] => 1234567890

                            [faxNumber] => 123-456-7890

                        )

                    [customerPaymentProfileId] => 33333333

                    [payment] => SimpleXMLElement Object

                        (

                            [creditCard] => SimpleXMLElement Object

                                (

                                    [cardNumber] => XXXX0002

                                    [expirationDate] => XXXX

                                )

                        )

                )

        )

    [shipToList] => Array

        (

            [0] => SimpleXMLElement Object

                (

                    [firstName] => Test

                    [lastName] => Test

                    [company] => Company Name

                    [address] => 1234 Test St

                    [city] => Testlyvania

                    [state] => OH

                    [zip] => 44720

                    [country] => United States

                    [phoneNumber] => 123-456-7890

                    [faxNumber] => SimpleXMLElement Object

                        (

                        )

                    [customerAddressId] => 44444444
                )

            [1] => SimpleXMLElement Object

                (

                    [firstName] => Test

                    [lastName] => Test

                    [company] => SimpleXMLElement Object

                        (

                        )

                    [address] => 1234 Test St

                    [city] => Testlyvania

                    [state] => OH

                    [zip] => 44720

                    [country] => United States

                    [phoneNumber] => 1234567890

                    [faxNumber] => 123-456-7890

                    [customerAddressId] => 55555555
                )

        )

)


SimpleXMLElement Object

(

    [customerType] => individual

    [billTo] => SimpleXMLElement Object

        (

            [firstName] => Test

            [lastName] => Test

            [company] => Company Name

            [address] => 1234 Test St

            [city] => Testlyvania

            [state] => OH

            [zip] => 44720

            [country] => United States

            [phoneNumber] => 123-456-7890

            [faxNumber] => SimpleXMLElement Object

                (

                )

        )

    [customerPaymentProfileId] => 22222222

    [payment] => SimpleXMLElement Object

        (

            [creditCard] => SimpleXMLElement Object

                (

                    [cardNumber] => XXXX1111

                    [expirationDate] => XXXX

                )

        )

)
如您所见,一旦直接访问“paymentProfiles”属性,它就从Array类型变成Object类型。然而,如果我试图直接访问它的第二个索引,那就很好了

PHP代码:

print_r($parsedresponse);
print_r($parsedresponse->profile);
print_r($parsedresponse->profile->paymentProfiles);
print_r($parsedresponse->profile->paymentProfiles[1])
生成以下输出:

SimpleXMLElement Object

(

    [customerType] => individual

    [billTo] => SimpleXMLElement Object

        (

            [firstName] => Test

            [lastName] => Test

            [company] => SimpleXMLElement Object

                (

                )

            [address] => 1234 Test St

            [city] => Testlyvania

            [state] => OH

            [zip] => 44720

            [country] => United States

            [phoneNumber] => 1234567890

            [faxNumber] => 123-456-7890

        )

    [customerPaymentProfileId] => 33333333

    [payment] => SimpleXMLElement Object

        (

            [creditCard] => SimpleXMLElement Object

                (

                    [cardNumber] => XXXX0002

                    [expirationDate] => XXXX

                )


        )

)

为什么直接访问时,$parsedresponse->profile->paymentProfiles的行为像一个对象,而不像预期的那样像一个数组?

另一个答案似乎包含了您需要的大部分信息。它帮助了我。foreach循环对我来说很好,尽管循环的标准也很好

因此,即使根据print\r,$parsedresponse->profile不是数组,您也应该能够执行以下操作。如果$parsedresponse->profile是一个数组,它也应该可以工作

print_r($parsedresponse);
foreach($profile as $prof){
    print_r($prof);
    foreach($prof->paymentProfiles as $pProf){
        print_r($pProf);
    }
}

print\u r
var\u dump
对于
simplexmlement
几乎是无用的。几乎每个子节点和属性本身都将是一个
simplexmlement
,即使它看起来像表面上的数组