目标:按数字从PHP对象中检索数据元素。
这是对象的print_r($ data):
stdClass Object
(
[0] => stdClass Object
(
[TheKey] => 1456
[ThingName] => Malibu
[ThingID] => 7037
[MemberOf] => California
[ListID] => 7035
[UserID] => 157
[UserName] => John Doe
)
)
我无法弄清楚如何从中汲取价值。这只是一个多记录对象的记录,应该是id而不是名称。
这些是尝试说明目标的失败尝试:
echo $data -> 0 -> UserName;
echo $data[0] -> UserName;
答案 0 :(得分:32)
通常,PHP变量名不能以数字开头。由于$data
没有实现stdClass
,因此无法作为数组访问ArrayAccess
- 它只是一个普通的基类。
但是,在这种情况下,您可以尝试按其数字名称访问object属性,如下所示:
echo $data->{'0'}->UserName;
我能想到为什么Spudley的答案会导致错误的唯一原因是因为你运行的是PHP 4,它不支持使用foreach
来迭代对象。
答案 1 :(得分:8)
BoltClock建议使用“$ data-> {'0'} - > UserName”显然不再适用于PHP 5.
我遇到了同样的问题,我发现current()可以像这样得到那个编号的类元素......
echo current($data)->UserName;
或者,如果这不起作用(取决于对象),您可能需要执行另一个current()调用,如下所示:
echo current(current($data))->UserName;
答案 2 :(得分:4)
适用于PHP5 +
echo $data[0]->UserName;
或
foreach ($data as $data){
echo $data->UserName;
}
或@orrd建议
current($data)->UserName works great too.
答案 3 :(得分:3)
您是否尝试过foreach()
循环?这应该给你所有可访问的元素,和
它返回的键可以为您提供更好的线索,如何直接访问它们。
答案 4 :(得分:0)
试试这个:
echo $data[0]['UserName'];
根据手册,对象不应该以这种方式使用。评论on this page确实提供了一种方法,如果这对你来说是必须的。如果你只是将对象用于属性(而不是行为),你也可以简单地依赖数组。