Как получить доступ к члену stdClass в PHP, который начинается с @

У меня есть некоторый объект json, который я декодировал, и один из атрибутов начинается с "@", и я не могу получить доступ к элементу с php, потому что он выдает ошибку.

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

Как мне получить доступ к атрибутам?

Ответ 1

Вы можете получить к нему доступ по строке:

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

Или переменная:

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

Дополнительные сведения о том, как определяются и используются переменные, см. в следующих документах:

  • Основы переменных - Полезно для изучения того, что можно получить в виде переменной без необходимости использовать строки.
  • Переменные переменные - Как мы использовали переменную в качестве имени для другой переменной. Это может быть опасно, поэтому тщательно проведите осторожность.

Ответ 2

Вы можете сделать это:

$object->{'@attributes'}

Ответ 3

Попробуйте использовать

$objSimpleXml->attributes()->id

Пример кода для ссылки

<?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

прямой доступ ниже от ircmaxwell или Richard Tuin, однако вы можете декодировать JSON со вторым параметром true и recive array insted, что может быть проще для доступа к