Как разделить значения массива на разные части? Есть массив числовых значений:array(16,7,45,23124,45,12231,32345,45,45456,23,456,1212,450...n); // ещё миллион значений Из него нужно сделать:array(16,7,45,23124,45,45656,23,456...n); array(45,12311,32345...n); array(45456,23,456,1212,450...n); Нужно лёгкое ресурсонезатратное решение или функция, который разобьёт этот массив на массивы одинакового размера. Тоесть, чтобы сумма значений итоговых массивов была не более 100000 и при этом должно получиться МИНИМАЛЬНОЕ допустимое количество массивов. Ну или просто вывелись значения или ключи в нужном порядке.Проблема сложнее чем кажется на первый взгляд! Какие есть идеи? upd: Значения разрывать нельзя.
Для решения данной задачи можно воспользоваться следующим алгоритмом:
Создать пустой массив для хранения итоговых подмассивов.Создать временный массив для хранения текущего подмассива.Пройтись по исходному массиву и добавлять каждое значение во временный массив, при этом проверяя сумму значений во временном массиве. Когда сумма достигнет 100000 или последует последний элемент исходного массива, добавить временный массив в итоговый массив и очистить временный массив.Повторять пункт 3 до тех пор, пока не будет пройден весь исходный массив.
Ниже представлен пример кода, который реализует описанный алгоритм на PHP:
Этот код разобьет ваш исходный массив на подмассивы, сумма значений которых не превышает 100000, и выведет эти подмассивы. Можно дальше работать с этими подмассивами по вашим потребностям.
Для решения данной задачи можно воспользоваться следующим алгоритмом:
Создать пустой массив для хранения итоговых подмассивов.Создать временный массив для хранения текущего подмассива.Пройтись по исходному массиву и добавлять каждое значение во временный массив, при этом проверяя сумму значений во временном массиве. Когда сумма достигнет 100000 или последует последний элемент исходного массива, добавить временный массив в итоговый массив и очистить временный массив.Повторять пункт 3 до тех пор, пока не будет пройден весь исходный массив.Ниже представлен пример кода, который реализует описанный алгоритм на PHP:
function splitArray($inputArray, $maxSum) {$outputArray = array();
$tempArray = array();
$sum = 0;
foreach($inputArray as $value) {
$sum += $value;
if ($sum <= $maxSum) {
$tempArray[] = $value;
} else {
$outputArray[] = $tempArray;
$tempArray = array($value);
$sum = $value;
}
}
if (!empty($tempArray)) {
$outputArray[] = $tempArray;
}
return $outputArray;
}
$inputArray = array(16,7,45,23124,45,12231,32345,45,45456,23,456,1212,450); // ваш исходный массив
$maxSum = 100000; // максимальная сумма значений в подмассиве
$outputArray = splitArray($inputArray, $maxSum);
foreach ($outputArray as $subArray) {
print_r($subArray);
}
Этот код разобьет ваш исходный массив на подмассивы, сумма значений которых не превышает 100000, и выведет эти подмассивы. Можно дальше работать с этими подмассивами по вашим потребностям.