如何从 stdClass 对象中提取@attributes?
How extract @attributes from stdClass Object?
如何从 stdClass 对象中提取属性?我有变量 $data
。对它执行 print_r
我得到:
stdClass Object
(
[@attributes] => stdClass Object
(
[id] => cover
[title] => Cover
)
[text] => text
)
当我尝试阅读 text
时没问题。但是当我尝试用 $data["id"]
和 $data["title"]
读取 id
和 title
时得到错误:
致命错误:未捕获错误:无法将 stdClass 类型的对象用作数组...
我该如何解决?唯一的机会是使用 json_encode
/json_decode
转换为数组?没有更面向对象的解决方案吗?
谢谢。
通常,您只需像这样使用属性名称:
$data->foo
但是,由于您的属性名称 @attributes
包含一个特殊字符,您必须使用此扩展语法:
$data->{'@attributes'}
然后,您可以进一步引用它的子键:
$id = $data->{'@attributes'}->id;
或者,您可以传递一个真值作为 json_decode() 的第二个参数,然后您将得到一个数组而不是一个对象:
$data = json_decode($raw, true);
$id = $data['@attributes']['id'];
如何从 stdClass 对象中提取属性?我有变量 $data
。对它执行 print_r
我得到:
stdClass Object
(
[@attributes] => stdClass Object
(
[id] => cover
[title] => Cover
)
[text] => text
)
当我尝试阅读 text
时没问题。但是当我尝试用 $data["id"]
和 $data["title"]
读取 id
和 title
时得到错误:
致命错误:未捕获错误:无法将 stdClass 类型的对象用作数组...
我该如何解决?唯一的机会是使用 json_encode
/json_decode
转换为数组?没有更面向对象的解决方案吗?
谢谢。
通常,您只需像这样使用属性名称:
$data->foo
但是,由于您的属性名称 @attributes
包含一个特殊字符,您必须使用此扩展语法:
$data->{'@attributes'}
然后,您可以进一步引用它的子键:
$id = $data->{'@attributes'}->id;
或者,您可以传递一个真值作为 json_decode() 的第二个参数,然后您将得到一个数组而不是一个对象:
$data = json_decode($raw, true);
$id = $data['@attributes']['id'];