Как разделить значения массива на разные части? Есть массив числовых значений: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: Значения разрывать нельзя.

21 Авг 2019 в 06:15
203 +1
0
Ответы
1

Для решения данной задачи можно воспользоваться следующим алгоритмом:

Создать пустой массив для хранения итоговых подмассивов.Создать временный массив для хранения текущего подмассива.Пройтись по исходному массиву и добавлять каждое значение во временный массив, при этом проверяя сумму значений во временном массиве. Когда сумма достигнет 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, и выведет эти подмассивы. Можно дальше работать с этими подмассивами по вашим потребностям.

20 Апр 2024 в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир