Как разделить значения массива на разные части? Есть массив числовых значений: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
165 +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 Апр в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 852 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир