За последние 24 часа нас посетили 22693 программиста и 1207 роботов. Сейчас ищут 904 программиста ...

Вывести данные функции, каким образом?

Тема в разделе "PHP для новичков", создана пользователем nevesomost, 7 окт 2021.

  1. nevesomost

    nevesomost Новичок

    С нами с:
    11 апр 2021
    Сообщения:
    3
    Симпатии:
    0
    Всем привет.
    Нужна помощь. Кто поможет решить скину на карточку на кофе. :)

    Итак, гружу данные с одной букмекерской конторы, через RollingCurl, это такая старенькая и простая библиотека, которая позволяет сделать за раз очень много запросов к сайту и не уйти в блек лист за мини ддос.

    Вот код моего скрипта:
    PHP:
    1. <?php
    2.  
    3.     // Модуль получения данных с xstavka
    4.  
    5.     require __DIR__ . '/lib/RollingCurl.php';
    6.     require __DIR__ . '/lib/Request.php';
    7.  
    8.     // Получаем список всех матчей лайва
    9.     $ch = curl_init("https://1xstavka.ru/LiveFeed/Get1x2_VZip?count=1000&mode=4&top=true&partner=5");
    10.     $fp = fopen('data/xstavka_list.json', "w");
    11.  
    12.     curl_setopt($ch, CURLOPT_FILE, $fp);
    13.     curl_setopt($ch, CURLOPT_HEADER, 0);
    14.  
    15.     curl_exec($ch);
    16.     if(curl_error($ch)) {
    17.         fwrite($fp, curl_error($ch));
    18.     }
    19.  
    20.     curl_close($ch);
    21.     fclose($fp);
    22.  
    23.     // Получаем данные по каждому матчу
    24.     $json = file_get_contents('data/xstavka_list.json');
    25.     $ids = json_decode($json, true);
    26.  
    27.     $rc = new \RollingCurl\RollingCurl();
    28.     $rc->window_size = 20; // Количество одновременных соединений
    29.  
    30.     foreach ($ids['Value'] as $value) {    
    31.         $rc->get('https://1xstavka.ru/LiveFeed/GetGameZip?id='.$value['I']); // Формируем очередь запросов
    32.     }
    33.    
    34.     $result = array();
    35.     $rc->setCallback(function(\RollingCurl\Request $request, \RollingCurl\RollingCurl $rollingCurl) {
    36.     $t = json_decode($request->getResponseText());
    37.  
    38.         foreach($t as $key=>$value) {
    39.            $new[$key]['ID'] = $value->I;
    40.         }
    41.         print_r($t);
    42.     });
    43.    
    44.     $rc->execute(); // Запускаем
    Задача такая:
    1. Получить данные в массивах JSON
    2. Разобрать каждый и сделать свой массив, вида:
    Array
    [0] => Array
    .....ID
    .....Name и т.д.
    Array
    [1] => Array
    .....ID
    .....Name и т.д.
    и т.д.

    Для меня это кажется просто. Но, я столкнулся одной неприятной проблемой. Для вывода данных используется объект, setCallback, и это кажется, цикл. Например, я получаю 10 JSON массивов и на экране в print_r($t) я увижу 10 массивов. Выведенных не разом, а циклом. Причем, я вижу их каждый раз новым массивом. Я имею ввиду, не построчно с номерами ключей, а вот так:
    Array (
    )
    Array (
    )

    Вопрос, как соединить массивы воедино и обработать результаты? Array_merge, array_values, array_columns - не работают, либо я их неправильно применил. Не знаю. Но я пробовал уже всё. Проблема в том, на мой взгляд, что я пытаюсь их получить из внешней функции.
    Заранее спасибо за помощь.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.825
    Симпатии:
    738
    Адрес:
    Татарстан
    гадание на кофейной гуще.... какого характера у вас там массивы приходят? что выдает print_r($t) ? конкретно
     
  3. nevesomost

    nevesomost Новичок

    С нами с:
    11 апр 2021
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте, гадать ничего не нужно.
    Можно открыть ссылку было бы и глянуть что я вытягивал по этому адресу https://1xstavka.ru/LiveFeed/Get1x2_VZip?count=1000&mode=4&top=true&partner=5

    Уже решили проблему. Спасибо за внимание.
    PHP:
    1. $result = []; //забудьте про array(), это очень старая фигня
    2.     $rc->setCallback(function(\RollingCurl\Request $request, \RollingCurl\RollingCurl $rollingCurl) use (&$result) {
    3.     $t = json_decode($request->getResponseText());
    4.         $new = []; //не забудьте объявить $new
    5.         foreach($t as $key=>$value) {
    6.            $new[$key]['ID'] = $value->I;
    7.         }
    8.         $result[] = $new; //в массив $result мы добавляем массив $new
    9.         //print_r($t);
    10.        return $result;
    11.     });
    12.    
    13.     $rc->execute(); // Запускаем
    14.     print_r($result);