13

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?

Nikhil
  • 485
  • 1
  • 4
  • 16

4 Answers4

32

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
ircmaxell
  • 163,128
  • 34
  • 264
  • 314
9

You could do this:

$object->{'@attributes'}
Richard Tuin
  • 4,484
  • 2
  • 19
  • 18
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";
}
?> 
stealthyninja
  • 10,343
  • 11
  • 51
  • 59
2

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

bensiu
  • 24,660
  • 56
  • 77
  • 117