【问题标题】:In PHP, how can I access a child object when I don't know it's name?在 PHP 中,当我不知道子对象的名称时,如何访问它?
【发布时间】:2014-02-15 18:38:02
【问题描述】:

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

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

我想访问id。有两个问题,都是号码1234567

  1. 这是一个非法的财产名称。
  2. 数字每次都会不同,我无法预测数字会是多少。我需要一种访问id 的方法,即使我不知道号码。

我知道我可以用花括号克服问题 (1),但我不知道如何克服 (2)。我不想用get_object_vars,因为对象可能很大,而且那个功能很慢。

我目前的解决方案很简单 foreach ($data->foo->bar as $id); 但这感觉很老套。有没有更好的办法?

【问题讨论】:

  • 是否使用json_decode(,true) 然后重置数组,(因此索引零将是一个有效属性)是一个选项?
  • 应该没有办法访问你不知道的东西

标签: php object properties


【解决方案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

【讨论】:

  • 太棒了。简单,但有效。谢谢。
【解决方案2】:

如果您不再需要整个数组而只想获取 id,您可以像这样获取它:

<?php

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

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

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

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 2010-10-30
    • 2021-12-10
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多