Какой вариант менее затратный с точки зрения памяти
function batch($bigArray) {
$batchSize = 1000;
for ($i = 0; $i <= count($bigArray); $i += $batchSize) {
yield array_slice($bigArray, $i, $batchSize);
}
}
function chunk($bigArray) {
$chunkSize = 1000;
return array_chunk($bigArray, $chunkSize);
}
#1
foreach(batch($bigArray) as $item) {
$memoryUsage = memory_get_usage();
//do something
}
#2
foreach(chunk($bigArray) as $item) {
$memoryUsage = memory_get_usage();
//do something
}
В первом варианте внутри foreach memory_get_usage выдает меньшее число, но как насчет функции array_slice внутри batch() там же каждую итерацию передается целый масив, не будет ли переполнения памяти в array_slice.
Какой вариант более предпочтительней? или может есть лучшее решение (при условии что массив все же нужно разбить на части)
P.S. массив приходит из-вне, то есть раньше разбить его не предоставляется возможным
Спасибо!