Как вытащить данные из получившегося массива? (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

    alt text


  • administrators

    @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 для обращения к серверу, что-бы ошибки отлавливать нормально.


  • Freeland

    Да, у стокса неудобный вывод. приходится цикл использовать, чтобы найти нужную строчку. Проблему с Cloudfire стокса в ограничении на число запросов я решил кешированием запросов. Скрипт можно на крон повесить и обновлять раз в ~15 минут.