• Вывод вложенного массива из многомерного массива?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    В самом низу написал — зачем такой код писать не нужно...

    Готовый код под вашу задачу:
    <?php
    
    $input = '{"success":true,"data":[{"sport_key":"soccer_korea_kleague1","sport_nice":"K League 1","teams":["Jeonbuk Hyundai Motors","Suwon Samsung Bluewings"],"commence_time":1588932000,"home_team":"Jeonbuk Hyundai Motors","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":1588281960,"odds":{"h2h":[1.75,3.85,3.7]}},{"site_key":"sport888","site_nice":"888sport","last_update":1588282210,"odds":{"h2h":[1.74,3.8,3.65]}},{"site_key":"onexbet","site_nice":"1xBet","last_update":1588282134,"odds":{"h2h":[1.87,3.96,3.5]}},{"site_key":"betfair","site_nice":"Betfair","last_update":1588281947,"odds":{"h2h":[1.68,1.28,1.25],"h2h_lay":[85.0,85.0,85.0]}},{"site_key":"paddypower","site_nice":"Paddy Power","last_update":1588281989,"odds":{"h2h":[1.67,4.2,3.6]}}],"sites_count":5},{"sport_key":"soccer_korea_kleague1","sport_nice":"K League 1","teams":["Sangju Sangmu FC","Ulsan Hyundai FC"],"commence_time":1589000400,"home_team":"Ulsan Hyundai FC","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":1588281960,"odds":{"h2h":[3.85,1.88,3.3]}},{"site_key":"sport888","site_nice":"888sport","last_update":1588282210,"odds":{"h2h":[3.8,1.85,3.25]}},{"site_key":"onexbet","site_nice":"1xBet","last_update":1588282134,"odds":{"h2h":[3.76,1.92,3.5]}}],"sites_count":3},{"sport_key":"soccer_korea_kleague1","sport_nice":"K League 1","teams":["Daegu FC","Incheon United"],"commence_time":1589009400,"home_team":"Incheon United","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":1588281960,"odds":{"h2h":[2.23,2.95,3.2]}},{"site_key":"sport888","site_nice":"888sport","last_update":1588282210,"odds":{"h2h":[2.2,2.9,3.2]}},{"site_key":"onexbet","site_nice":"1xBet","last_update":1588282134,"odds":{"h2h":[2.28,2.98,3.3]}}],"sites_count":3},{"sport_key":"soccer_korea_kleague1","sport_nice":"K League 1","teams":["Sangju Sangmu FC","Seongnam FC"],"commence_time":1589018400,"home_team":"Sangju Sangmu FC","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":1588281960,"odds":{"h2h":[2.38,2.75,3.2]}},{"site_key":"sport888","site_nice":"888sport","last_update":1588282210,"odds":{"h2h":[2.35,2.7,3.15]}}],"sites_count":2},{"sport_key":"soccer_korea_kleague1","sport_nice":"K League 1","teams":["FC Seoul","Gangwon FC"],"commence_time":1589095800,"home_team":"Gangwon FC","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":1588281960,"odds":{"h2h":[2.38,2.75,3.2]}},{"site_key":"sport888","site_nice":"888sport","last_update":1588282210,"odds":{"h2h":[2.35,2.7,3.15]}},{"site_key":"onexbet","site_nice":"1xBet","last_update":1588282134,"odds":{"h2h":[2.42,2.84,3.2]}}],"sites_count":3}]}';
    $data = json_decode($input, true);
    
    function grabBookerData(array $data, string $bookerName): array {
        return array_map(function(array $item) use ($bookerName) {
            // Собираем результирующий объект события
            $event             = new \stdClass();
            $event->sport_nice = $item['sport_nice'] ?? null;
            $event->teams      = $item['teams'] ?? [];
        
            // Из данных по разным букмекерам оставляем h2h, который нам нужен
            $bookersData = array_column($item['sites'], null, 'site_key');
            $event->h2h  = $bookersData[$bookerName]['odds']['h2h'] ?? [];
            
            return $event;
        }, $data['data'] ?? []);
    }
    
    var_dump(grabBookerData($data, 'unibet')); // итоговый набор данных

    sandbox.onlinephpfunctions.com/code/6cb94c1070692d...

    Зачем не нужно писать такой код:
    Такого плана данные лучше пропускать через сериалайзер, а потом просто фильтрануть в результирующих объектах (или просто достать) нужные данные.
    Плюс использования сериалайзеров — не нужно писать код выше, а нужно только писать свои объекты в уже нужном для вас формате. И потом данные маппить на эти объекты через сериалайзеры, тем самым не заплетаться в исходных данных.

    Сериалайзеры на PHP:
    Fractal (рекомендую)
    Symfony Serializer
    Zend Serializer
    JMS Serializer — его многие ругают за неторопливость и монструозность, но он довольно функциональный и забирает на себя кучу телодвижений, я бы делал с ним. Он становится небольшой проблемой, когда десятки и тысячи операций идут за некоторое непозволительное число серверов/времени.
    Ответ написан
    5 комментариев
  • Как вывести JSON данные на главную страницу wordpress?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Попробуйте так:
    <?php
    
    header('Content-Type: text/plain; charset=UTF-8');
    
    $data = file_get_contents('https://site.com/json_config/count.json');
       
    if ($data !== false) {
        $arr = json_decode($data, true);
        echo "Из конфига получены следующие данные:\n";
        echo print_r($arr, true);
    }
    
    else {
        echo "Не удалось прочитать файл конфигурации!";
    }
    
    ?>
    Ответ написан
  • Как вывести Migx в Migx?

    @AlexRas
    Все просто,

    Пример,
    1-ое поле, которое выводится на странице ресурса и в нужном поле где хочешь вывести другое поле MIGX делаешь так joxi.ru/KAxx4Ws4bD19A8

    2-е поле как обычно. только в шаблонах вывода ничего не выбираешь

    Для вывода на сайте, внутри getImageList вставляешь еще один getImageList с таким параметром joxi.ru/5md4Jasv0g8nm1

    --------------------------------------------------------

    Первый вызов:
    [[getImageList? tvname=`tv` tpl=`tpl`]]

    Второй вызов в чанке tpl:
    [[getImageList? value=`[[+image]]` tpl=`tpl2`]]
    Ответ написан