2010-10-03 47 views
9

目标:按数字从PHP对象内检索数据元素。按索引号(不是名称)返回PHP对象

这是对象的print_r($数据):

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; 

回答

27

通常,PHP变量名称不能以数字开头。作为一个数组,你不能访问$data,因为stdClass没有实现ArrayAccess - 这只是一个普通的基类。

然而,在这样的情况下,你可以尝试通过其数字名称访问对象的属性,像这样:

echo $data->{'0'}->UserName; 

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

+0

是的!谢谢。 – 2010-10-03 20:50:16

+1

你确定这有效吗?在PHP 5.3上,它产生'未定义的属性:stdClass :: $ 0',这是我的经验一直。 – Matthew 2010-10-03 21:00:21

+0

@konforce:我认为我的建议适用于PHP 4,这将是我认为OP正在运行,因为Spudley的答案不起作用。 – BoltClock 2010-10-03 21:02:32

3

您已经尝试了foreach()循环?这应该为您提供所有可访问的元素,并且它返回的密钥可以让您更好地了解如何直接访问它们。

+0

致命错误:你使用的是什么版本的PHP不能使用类型为stdClass的对象为数组 – 2010-10-03 20:48:07

+0

?从PHP5开始,你应该可以在对象上使用'foreach'。 (如果你还在使用PHP4,你应该升级,因为它的使用寿命已经超过两年) – Spudley 2010-10-03 20:52:16

+0

+1,因为这样可以支持PHP版本。绝对看起来像这里的PHP 4案例。 – BoltClock 2010-10-03 20:54:58

0

试试这个:

echo $data[0]['UserName']; 

根据手册,对象并不意味着使用这种方式。如果这对你来说是必须的,那么评论on this page确实提供了一种解决方法。如果你只是使用对象的属性(而不是行为),你也可以简单地依赖数组。

+0

致命错误:不能联机
2010-10-03 20:44:52

+0

我更新了我的答案file.php使用类型为stdClass的对象为数组。总之,我不认为这是可能的,但它可以实施。 – pixeline 2010-10-03 20:52:26

7

BoltClock的建议,用“$数据 - > {0} - >用户名”显然不再与PHP 5

工作我有同样的问题,我发现,目前()将努力获得该编号类元素这样的...

echo current($data)->UserName; 

或者,如果不工作(根据不同的对象),你可能需要做的另一电流()调用是这样的:

echo current(current($data))->UserName; 
4

这适用于PHP5 +

echo $data[0]->UserName; 

foreach ($data as $data){ 
    echo $data->UserName; 
    } 

或由@orrd建议

current($data)->UserName works great too. 
+0

我想为什么这个答案没有得到绿色检查 – 2016-10-12 07:18:27