Добрый вечер. Объясните пожалуйста, как действовать и как это обрабатывать.
Я делаю запрос к удаленному серверу, сервер возвращает массив в JSON представлении. В массиве может быть более 100 тысяч записей.
Примерно следующего вида
[
1 => ['index' => 'something', 'index' => 'something', 'sub_array' => ['el_1', 'el_2', 'el_3'],
4 => ['index' => 'something', 'index' => 'something', 'sub_array' => ['el_1', 'el_2', 'el_3'],
66 => ['index' => 'something', 'index' => 'something', 'sub_array' => ['el_1', 'el_2', 'el_3'],
99 => ['index' => 'something', 'index' => 'something', 'sub_array' => ['el_1', 'el_2', 'el_3'],
]
Мне нужно получить весь массив, потом определенным образом его спарсить и положить все это дело в базу.
Чтобы получить данные массив я делаю запрос следующего вида
$guzzle = new \GuzzleHttp\Client();
$response = $guzzle->request('GET', $api_url, ['stream' => true])->getBody();
$response = $response->getContents();
$response = json_decode($response, true);
После чего в дело летит форич и я делаю свои грязные дела и на основе ответа, создаю 2 массива и добавляю в базу.
Но все время вылетаю по памяти, как можно этот момент исправить, чтобы не вылетать по памяти, но и не увеличивать ее объем.
И я не понимаю, я вылетаю на моменте персинга данных или, когда строю массив на основе ответа и в переменную попадает массив в котором более 30к элементов.
$data = array_chunk($response, 500, true);
Я предположил, что нужно чанкать ответ и проблема ушла, на первый взгляд все работало. Но мне нужно сохранять оригинальные ключи, следовательно, передав третьим аргументом true, проблема снова появилась.