在 PHP 中获取 stdClass 对象的名称

Getting the name of a stdClass object in PHP

我正在玩一个 API,它以 JSON 格式返回数据,然后我 json_decode() 为以下格式:

[stockData] => stdClass Object
    (
        [data] => stdClass Object
            (
                [PS3] => stdClass Object
                    (
                        [2015-01-26T20:45:01Z] => stdClass Object
                            (
                                [AMU] => 999.76
                                [ZIT] => 3.63
                            )

                    )

            )

        [status] => stdClass Object
            (
                [code] => 200
                [text] => ok
            )

    )

我需要一些方法来获取 2015-01-26T20:45:01Z(它一直在变化)。

我已经尝试 get_Class() 对象,例如:

get_Class($bawsaq->stockData->data->PS3)(实际上是在一个foreach循环中)

但返回的只是:"stdClass" 而不是名称。如何获取对象的名称?

你可以使用get_object_vars方法。

$obj = new stdClass();
$obj->field1 = 'value1';

print_r(get_object_vars($obj));

结果:

Array
(
    [field1] => value1
)

解码 JSON 时,使用

$bawsaq = json_decode($json, true);

这将 return 关联数组,而不是所有 JSON 对象的 stdClass 对象。然后你可以使用

$keys = array_keys($bawsaq['stockData']['data'];
$date = $keys[0];

它实际上不是对象的 class:它是包含 stdClass 对象的 属性 的名称。因此,您需要从 $bawsaq->stockData->data->PS3 获取第一个对象 属性 的名称。实际上,这有点棘手。

使用数组更好。如果使用json_decode$assoc参数,只要出现JSON对象,就可以获得关联数组而不是对象。这在 PHP.

中更容易处理
$bawsaq = json_decode($jsonData, true);

你可以通过key获取键名:

$dateTime = key($bawsaq['stockData']['data']['PS3']);

您可以使用 json_decode 的第二个参数。这会将 return 数据作为关联数组而不是对象列表,因此您可以简单地使用

$input = json_decode($jsonInput, true);
$key = key($input['stockData']['data']['PS3']);
$data = $input['stockData']['data']['PS3'][$key];

或 foreach 循环。另见 key 关于 php.net。