首页 > 解决方案 > 为什么我不能将此 json 访问到 php 数组?

问题描述

我正在尝试使用 curl 从这个 api 获取股票价格

//Initialize cURL.
$ch = curl_init();
 
//Set the URL that you want to GET by using the CURLOPT_URL option.
curl_setopt($ch, CURLOPT_URL, 'https://cloud.iexapis.com/stable/stock/market/batch?symbols=aapl,msft&types=quote&filter=latestPrice&token=(redacted)');
 
//Set CURLOPT_RETURNTRANSFER so that the content is returned as a variable.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
//Set CURLOPT_FOLLOWLOCATION to true to follow redirects.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
 
//Execute the request.
$data = curl_exec($ch);
 
//Close the cURL handle.
curl_close($ch);
 
$stockdata = json_decode($data, true);

现在我收到此错误:注意:未定义的偏移量:0

这是我转换成数组的json:

{"AAPL":{"quote":{"latestPrice":425.04}},"MSFT":{"quote":{"latestPrice":205.01}}}

这是我用来尝试访问数组的代码,稍后我想遍历所有价格。

echo $stockdata[0]['quote']['latestPrice'];

标签: phpcurl

解决方案


当您使用关联数组时,它不再是数字索引,您需要按名称访问它的键,即“AAPL”。

echo $stockdata['AAPL']['quote']['latestPrice'];

打印出来

425.04


更新 1

当你不知道第一个密钥时,就这样获取

echo $stockdata[array_keys($stockdata)[0]]['quote']['latestPrice'];

解释
array_keys($stockdata)将为您提供另一个数组,其中所有键名作为基于数字索引的数组。在[0]此示例中,您可以访问第一个元素(第 0 个元素),即“AAPL”。


更新 2

根据循环通过的评论,你可以这样做

foreach($stockdata as $stock => $data) {
    echo "{$stock} => {$data['quote']['latestPrice']}\n";
}

苹果 => 425.04
微软 => 205.01


推荐阅读