我正在创建一个小部件,以使用每天更新的免费 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 的了解还不够确定。有一个更好的方法吗?
2 回答
人到中年有点甜
TA贡献1895条经验 获得超7个赞
对键(日期)进行反向排序,然后使用以下命令选择第一个元素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'];
- 2 回答
- 0 关注
- 152 浏览
添加回答
举报
0/150
提交
取消