Как вытащить данные из получившегося массива? (json_decode)
-
На форуме много людей владеющих PHP
Может кто поможет!?$exchange_info = json_decode(file_get_contents("https://stocks.exchange/api2/prices"));
$sell = $exchange_info->????;
$buy = $exchange_info->????;
Как вытащить значения sell и buy из массива со значением market_name : MFC_BTC
-
@mr-maf Привет!
Во-первых:
json_decode
по умолчанию возвращает объект, а не массив. Что-бы получить массив,
надо вторым параметром отправлятьtrue
.Во-вторых, даже если учесть что мы получаем массив, то в твоём случае
$exchange_info
- это список массивов, поэтому тебе надо идти построчно по этому списку и вынимать инфу о$sell
и$buy
каждой строки.Вот базовый робочий пример получения JSON-а по АПИ и вывод каждой пары:
<?php $url = 'https://stocks.exchange/api2/prices'; $content = @file_get_contents($url); if ($content === false) { die("Failed to get JSON from the API call\n"); } $json = json_decode($content, true); if ($json === null) { die("Failed to decode JSON from the API call"); } printf( "%15s | %15s | %15s | %10s | %10s\n", 'Buy Price', 'Sell Price', 'Market', 'Upd Time', 'Srv Time' ); foreach ($json as $data) { printf("%15.8f | %15.8f | %15s | %10d | %10d\n", $data['buy'], $data['sell'], $data['market_name'], $data['updated_time'], $data['server_time'] ); }
Еще обрати внимание на то, что со стороны stocks.exchange стоит лимит на запросы к АПИ в минуту, при это довольно жесткий. Советую вместо
file_get_contents()
использовать какую-то нормальную библиотеку типаGuzzleHttp
для обращения к серверу, что-бы ошибки отлавливать нормально.
-
Да, у стокса неудобный вывод. приходится цикл использовать, чтобы найти нужную строчку. Проблему с Cloudfire стокса в ограничении на число запросов я решил кешированием запросов. Скрипт можно на крон повесить и обновлять раз в ~15 минут.