Почему я не могу получить доступ к массиву от json до php? - PullRequest
1 голос
/ 01 августа 2020

Я пытаюсь получить цены на акции из этого API с помощью curl

//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}}}

Вот мой код, который я использую, чтобы попытаться получить доступ к массиву, позже я хочу l oop через все цены.

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

1 Ответ

2 голосов
/ 01 августа 2020

Когда вы используете связанный массив, он больше не индексируется c, и вам нужно получить доступ к его ключу по имени, которое является 'AAPL'.

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

выводит

425,04

Обновление 1

Если вы не знаете первый ключ, просто получите его вот так

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

Пояснение array_keys($stockdata) даст вам еще один массив со всеми именами ключей как массив на основе индекса numeri c. С помощью [0] вы получаете доступ к первому элементу (0-й элемент), который в этом примере является «AAPL».

Обновление 2

Основываясь на комментариях для циклического прохождения, вы можете сделать это следующим образом

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

AAPL => 425.04 MSFT => 205,01

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...