使用Key作为数字PHP访问对象

时间:2013-06-18 01:27:03

标签: php oop object

我有一个看起来像这样的对象:

stdClass Object
(
    [page] => stdClass Object
        (
            [1] => stdClass Object
                (
                    [element] => stdClass Object
                        (
                            [background_color] => stdClass Object
...

当我打印print_r($arr->page)时:

stdClass Object
(
    [1] => stdClass Object
        (
            [element] => stdClass Object
                (
                    [background_color] => stdClass Object
                        (

但这没有任何印刷品:

print_r($arr->page->{"1"});

这会输出错误:

print_r($arr->page->1); 
  

解析错误:语法错误,意外T_LNUMBER,期待T_STRING或T_VARIABLE或'{'或'$'i

如何访问“1”元素?

更新:

我还尝试了$arr->page[1]$arr->page["1"],但收到了此错误:

  

致命错误:无法在

中使用stdClass类型的对象作为数组

更新2:

var_dump($arr->page);

打印出来:

 object(stdClass)#3 (1) {   [1]=>   
   object(stdClass)#4 (1) {
     ["element"]=>
     object(stdClass)#5 (20) {
       ["background_color"]=>
       object(stdClass)#6 (7) {

2 个答案:

答案 0 :(得分:13)

使用引号:

print_r($arr->page->{'1'});

从这里开始:How can I access an object attribute that starts with a number?

答案 1 :(得分:6)

您无法直接访问整数类变量。最好的选择是根本不使用StdClass。

如果您无法控制数据来源,可以通过$foo = (array) $foo投射到数组。

您还可以迭代元素:

foreach ($obj as $key=>$val)

或者

foreach (get_object_vars($obj) as $key => $val)