访问键为PHP的对象

访问键为PHP的对象,php,oop,object,Php,Oop,Object,我有一个像这样的对象: stdClass Object ( [page] => stdClass Object ( [1] => stdClass Object ( [element] => stdClass Object ( [background_col

我有一个像这样的对象:

stdClass Object
(
    [page] => stdClass Object
        (
            [1] => stdClass Object
                (
                    [element] => stdClass Object
                        (
                            [background_color] => stdClass Object
...
当我打印
打印时($arr->page)

但这不打印任何内容:

print_r($arr->page->{"1"});
这会打印一个错误:

print_r($arr->page->1); 
分析错误:语法错误、意外的T_LNUMBER、应为T_字符串或T_变量或“{”或“$”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) {
使用引号:

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

从这里:

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

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

您还可以迭代元素:

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


很抱歉,这没有为我打印任何内容?单引号或双引号请参阅PHP中单引号和双引号的区别。这仅适用于字符串键
“1”
vs
int(1)
。如果对象是由“非法”创建的也就是说,你不能像这样访问整数键。我不知道,谢谢你的澄清,但我已经尝试了这个答案,因为我的问题表明,它对我不起作用,你知道为什么它不起作用吗?
var\u dump($arr->page->{1'})
prints
NULL
感谢您的输入插孔,有关更多信息,请参阅正确答案。我刚开始在一个大型应用程序中工作,我需要修改对象内的一些值。我不确定对象在何处或如何创建。但随着我的深入,我将了解更多信息。对于那些有兴趣复制此问题的人,请使用此:
$arr=(object)['page'=>(object)[1=>(object)['element'=>'hello world']];
Wow真的,我不知道,我没有投你反对票,我会试着投,foreachIt会起作用!谢谢,我必须记住这一点,只是为了澄清我在那里使用了你的第一个例子
foreach($obj as$key=>$val)
$val->element
为我提供了访问权限,再次感谢!@Jack,说得好。我已经从答案中删除了这一部分。我想我记得我曾经处理过一些粗略的库,这些库在没有正当理由的情况下盲目地将API结果强制转换到对象中。你是说在
json_decode()
之前有一段时间吗
foreach ($obj as $key=>$val)
foreach (get_object_vars($obj) as $key => $val)