为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕村9548890 2021-06-09 13:48:52
我正在创建一个小部件,以使用每天更新的免费 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'];


查看完整回答
反对 回复 2021-06-25
  • 2 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信