在PHP中,当我不知道它的名字时,如何访问子对象?

时间:2014-02-15 18:38:02

标签: php object properties

使用json_decode,我最终得到了一个如下所示的对象:

$data->foo->bar->1234567->id

我想访问id。有两个问题,都是数字1234567

  1. 这是一个非法的财产名称。
  2. 这个数字每次都会有所不同,我无法预测这个数字是多少。我需要一种访问id的方法,即使我不知道该号码。
  3. 我知道我可以用花括号克服问题(1),但我不知道如何克服(2)。我不想使用get_object_vars,因为对象可能非常大,而且该功能非常慢。

    我目前的解决方案很简单 foreach ($data->foo->bar as $id);但这感觉相当黑客。还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

从上面的评论中,使用json_decode(,true)然后重置。

示例json数组如下所示:

Array (
    [foo] => Array (
            [bar] => Array (
                    [1234567] => Array (
                            [id] => 1234
                        )
                )
        )
)

代码:

<?php

$data = json_decode('{"foo":{"bar":{"1234567":{"id":1234}}}}', true);

reset($data['foo']['bar']);
$number = key($data['foo']['bar']);

echo $data['foo']['bar'][$number]['id'];

Output:1234

答案 1 :(得分:0)

如果你不再需要整个数组而只想获得id,你可以这样得到它:

<?php

$data = json_decode('{"foo":{"bar":{"1234567":{"id":1234}}}}', true);

echo array_shift($data['foo']['bar'])['id'];

仅当未知键是bar的第一个元素时才有效。 array_shift从$ data中删除元素。