[英]PHP get keys and values from Nth array in a nested JSON array
我正在創建一個小部件,以使用免費API的JSON列表顯示某公司的最新股價,該API每天更新。
我需要確定哪個密鑰是最新密鑰,並從該密鑰內部獲取收盤價。
這是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的了解還不夠。
有一個更好的方法嗎?
對鍵(日期)進行反向排序,然后選擇帶有reset
的fist元素:
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'];
元數據中有一個稱為“最后刷新”的值。
前十個字符是最后一次刷新的日期,與時間序列中最新數據點的鍵相同。
因此,抓住前十個字符並使用它來獲取最新值。
$latest = $arr["Time Series (Daily)"][substr($arr["Meta Data"]["2. Last Refreshed"],0,10)];
var_dump($latest);
輸出:
array(2) {
["1. open"]=>
string(9) "1144.5000"
["2. close"]=>
string(9) "1140.7700"
}
這意味着不需要循環或排序array / json中的數據。
要僅獲取收盤價,請使用:
$latestClose = $arr["Time Series (Daily)"][substr($arr["Meta Data"]["2. Last Refreshed"],0,10)]["2. close"];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.