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

SSH*_*his 6 php oop object

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

stdClass Object
(
    [page] => stdClass Object
        (
            [1] => stdClass Object
                (
                    [element] => stdClass Object
                        (
                            [background_color] => stdClass Object
...
Run Code Online (Sandbox Code Playgroud)

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

stdClass Object
(
    [1] => stdClass Object
        (
            [element] => stdClass Object
                (
                    [background_color] => stdClass Object
                        (
Run Code Online (Sandbox Code Playgroud)

但这没有任何印刷品:

print_r($arr->page->{"1"});
Run Code Online (Sandbox Code Playgroud)

这会输出错误:

print_r($arr->page->1); 
Run Code Online (Sandbox Code Playgroud)

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

如何访问"1"元素?

更新:

我也试着$arr->page[1]$arr->page["1"],但得到这个错误:

致命错误:不能使用stdClass类型的对象作为数组

更新2:

var_dump($arr->page);
Run Code Online (Sandbox Code Playgroud)

打印这个:

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

Ant*_*ine 16

使用引号:

print_r($arr->page->{'1'});
Run Code Online (Sandbox Code Playgroud)

从这里:如何访问以数字开头的对象属性?

  • 这仅适用于字符串键 `"1"` 与 `int(1)`。如果一个对象是通过“非法”手段创建的,那么你不能像这样访问整数键。 (3认同)

Mat*_*hew 8

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

如果无法控制数据源,可以通过转换为数组$foo = (array) $foo.

您还可以迭代元素:

foreach ($obj as $key=>$val)
Run Code Online (Sandbox Code Playgroud)

要么

foreach (get_object_vars($obj) as $key => $val)
Run Code Online (Sandbox Code Playgroud)