How to access a member of an stdClass in PHP that

2019-02-12 08:55发布

问题:

I have some json object that I decoded, and one of the attributes starts with an "@" and I can't access the element with php because it throws an error.

                    [offers] => stdClass Object
                    (
                        [@attributes] => stdClass Object
                            (
                                [id] => levaka0B8a
                            )
                    )

How would I go about accessing attributes?

回答1:

You can access it by a string:

echo $obj->{'@attributes'}->id; // levaka0B8a

Or a variable:

$name = '@attributes';
echo $obj->$name->id;

For more information on how variables are defined and used, see the following docs:

  • Variable Basics - Useful for learning what can be accessed as a variable without needing to use strings.
  • Variable Variables - How we used the variable to act as the name for another variable. This can be dangerous so tread carefully


回答2:

You could do this:

$object->{'@attributes'}


回答3:

Try to use,

$objSimpleXml->attributes()->id

Sample Code to Refer

<?php
$string = <<<XML
<a>
 <foo name="one" game="lonely">1</foo>
</a>
XML;

$xml = simplexml_load_string($string);
var_dump( $xml );
foreach($xml->foo[0]->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
}
?> 


回答4:

direct access is below from ircmaxwell or Richard Tuin, however you can decode JSON with second param true and recive array insted what could be an easier to access