PHP从嵌套的JSON数组中的第N个数组中获取键和值

我正在创建一个小部件,以使用每天更新的免费 API 中的 JSON 列表显示某家公司的最新股价。


我需要确定哪个键是最新的,并从该键中获取收盘价。


以下是 API 生成的 JSON 示例:


{

    "Meta Data": {

        "1. Symbol": "GOOG",

        "2. Last Refreshed": "2019-05-20 11:52:41"

    },

    "Time Series (Daily)": {

        "2019-05-20": {

            "1. open": "1144.5000",

            "2. close": "1140.7700"

        },

        "2019-05-17": {

            "1. open": "1168.4700",

            "2. close": "1162.3000"

        },

        "2019-05-16": {

            "1. open": "1164.5100",

            "2. close": "1178.9800"

        }

    }

}

为了减少 API 调用,我将 API 的 JSON 输出保存到服务器上的文件中,并且每天更新一次。


我可以使用以下代码获得收盘价的价值:


$json = 'jsonfile.json';

$json = json_decode($json, true);

echo $json['Time Series (Daily)']['2019-05-20']['2. close'];

但我需要从 JSON 中获取中间键(日期)的值。


我以为我可以做这样的事情,但我猜这里的数字被视为字符串而不是数组位置:


echo $json[1][0][1];

我可以使用循环来忽略键名,从顶部获取第三个键的值,将其存储在一个变量中并使用它来回显收盘价:


$i = 0;

$dateKey = '';


foreach($json as $row) {

    foreach($row as $key => $val) {

        $i = $i + 1;

        $dateKey = $key;

        if ($i == 3) {

            break;

        }

    }

}


echo $json['Time Series (Daily)'][$dateKey]['2. close'];

但这只有在最新价格始终处于顶部时才有效。我认为它会是……但我对 JSON 的了解还不够确定。


有一个更好的方法吗?


慕村9548890
浏览 153回答 2
2回答

人到中年有点甜

对键(日期)进行反向排序,然后使用以下命令选择第一个元素reset:krsort($array['Time Series (Daily)']);echo reset($array['Time Series (Daily)'])['2. close'];您也可以使用以下方法获取密钥(日期)key:echo key($array['Time Series (Daily)']);因此,如果您需要两者,请先获取密钥:$date = key($array['Time Series (Daily)']);echo $array['Time Series (Daily)'][$date]['2. close'];相反,您可以使用以下命令对最后一个进行排序和选择end:ksort($array['Time Series (Daily)']);echo end($array['Time Series (Daily)'])['2. close'];
打开App,查看更多内容
随时随地看视频慕课网APP