Вывести данные функции, каким образом?
Всем привет. Нужна помощь. Кто поможет решить скину на карточку на кофе. :)
Итак, гружу данные с одной букмекерской конторы, через 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(); // Запускаем
Задача такая:
- Получить данные в массивах JSON
- Разобрать каждый и сделать свой массив, вида: 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 шт):
$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);