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

Всем привет. Нужна помощь. Кто поможет решить скину на карточку на кофе. :)

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

<?php

// Модуль получения данных с xstavka

require __DIR__ . '/lib/RollingCurl.php';
require __DIR__ . '/lib/Request.php';

// Получаем список всех матчей лайва
$ch = curl_init("https://1xstavka.ru/LiveFeed/Get1x2_VZip?count=1000&mode=4&top=true&partner=5");
$fp = fopen('data/xstavka_list.json', "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
if(curl_error($ch)) {
    fwrite($fp, curl_error($ch));
}

curl_close($ch);
fclose($fp);

// Получаем данные по каждому матчу
$json = file_get_contents('data/xstavka_list.json');
$ids = json_decode($json, true);

$rc = new \RollingCurl\RollingCurl();
$rc->window_size = 20; // Количество одновременных соединений

foreach ($ids['Value'] as $value) {    
    $rc->get('https://1xstavka.ru/LiveFeed/GetGameZip?id='.$value['I']); // Формируем очередь запросов
}

$result = array();
$rc->setCallback(function(\RollingCurl\Request $request, \RollingCurl\RollingCurl $rollingCurl) {
$t = json_decode($request->getResponseText());

    foreach($t as $key=>$value) {
       $new[$key]['ID'] = $value->I;
    }
    print_r($t);
});

$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 - не работают, либо я их неправильно применил. Не знаю. Но я пробовал уже всё. Проблема в том, на мой взгляд, что я пытаюсь их получить из внешней функции. Заранее спасибо за помощь.


Ответы (1 шт):

Автор решения: nevesomost
$result = []; //забудьте про array(), это очень старая фигня
$rc->setCallback(function(\RollingCurl\Request $request, \RollingCurl\RollingCurl $rollingCurl) use (&$result) { 
$t = json_decode($request->getResponseText());
    $new = []; //не забудьте объявить $new
    foreach($t as $key=>$value) {
       $new[$key]['ID'] = $value->I;  
    }
    $result[] = $new; //в массив $result мы добавляем массив $new
    //print_r($t);
   return $result;
});

$rc->execute(); // Запускаем
print_r($result);
→ Ссылка