按索引号(不是名称)返回PHP对象

时间:2010-10-03 20:31:49

标签: php object

目标:按数字从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;

5 个答案:

答案 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确实提供了一种方法,如果这对你来说是必须的。如果你只是将对象用于属性(而不是行为),你也可以简单地依赖数组。