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

Ben*_*rie 12 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
        )
)
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何从中汲取价值.这只是一个多记录对象的记录,应该是id而不是名字.

这些是一些失败的尝试来说明目标是什么:

echo $data -> 0 -> UserName;
echo $data[0] -> UserName;
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 33

通常,PHP变量名称不能以数字开头.你不能$datastdClass没有实现一样访问数组ArrayAccess- 它只是一个普通的基类.

但是,在这种情况下,您可以尝试通过其数字名称访问对象属性,如下所示:

echo $data->{'0'}->UserName;
Run Code Online (Sandbox Code Playgroud)

我能想到为什么Spudley的答案会导致错误的唯一原因是因为你运行的是PHP 4,它不支持使用foreach迭代对象.

  • 你确定有效吗?在PHP 5.3上,它产生`Undefined property:stdClass :: $ 0`,这是我一直以来的经验. (2认同)
  • 在这种情况下,我会添加类似`if(version_compare(PHP_VERSION,'5.0.0','> ='))die('PHP 5不支持');`或至少作为评论的重大警告代码不向前兼容. (2认同)

orr*_*rrd 8

BoltClock建议使用"$ data - > {'0'} - > UserName"显然不再适用于PHP 5.

我遇到了同样的问题,我发现current()可以像这样得到那个带编号的类元素......

echo current($data)->UserName;
Run Code Online (Sandbox Code Playgroud)

或者,如果这不起作用(取决于对象),您可能需要执行另一个current()调用,如下所示:

echo current(current($data))->UserName;
Run Code Online (Sandbox Code Playgroud)