Суммировать элементы первого массива с элементами второго, найти минимальное и удалить элемент из второго массива
Есть два одномерных массива. Число элементов в каждом более 3
.
Например: $array1 = [3, 5, 1]
и $array2 = [2, 7, 1]
Надо в цикле суммировать каждый элемент первого массива с каждым элементом второго, найти минимальное значение этой суммы для каждой итерации и вывести эти минимумы в отдельный массив.
Например, для $array1[0] = 3
минимальная сумма при сложении с элементами второго массива будет 3 + 1 = 4
. После этого единицу из второго массива надо исключить.
На следующей итерации для $array1[1] = 5
$array2
уже должен иметь вид $array2 = [2, 7]
. Теперь для $array1[1] = 5
минимальная сумма при сложении с элементами второго массива будет 5 + 2 = 7
. После этого двойку из второго массива надо исключить и массив $array2
должен принять вид $array2 = [7]
.
Теперь для $array1[2] = 1
минимальная сумма при сложении с элементами второго массива будет 1 + 7 = 8
. В результате из всех минимумов создается массив вида $array3 = [4, 7, 8]
.
Как это сделать? Пока написал такой код:
function minimum($array1, $array2) {
$result = [];
foreach ($array1 as $arr1) {
foreach ($array2 as $key => $arr2) {
$result[] = $arr1 + $arr2;
//print_r($result);
//print_r($key);
$res = min($result);
if ($arr1 + $arr2 == $res) {
unset($array2[$key]);
}
print_r($array2);
}
}
}
Я до этого делал вариант с сортировкой второго массива $array2
. Вот он:
function minimum($array1, $array2) {
$res = [];
sort($array2);
for ($i= 0; $i < count($array1); $i++) {
$res[] += $array1[$i] + $array2[$i];
print_r($res);
}
}
Но он, к сожалению, не подходит. Я не могу, по условию задачи, сортировать элементы начальных массивов, а в каком порядке в них будут элементы я не знаю. Собственно из-за этого у меня и возник ступор.
Ответы (2 шт):
Если я правильно понял, то так:
function minimum($array1, $array2) {
$result = [];
$min_sum = PHP_INT_MAX;
$min_key = null;
foreach ($array1 as $arr1) {
foreach ($array2 as $key => $arr2) {
$sum = $arr1 + $arr2;
$result[] = $sum;
if ($sum < $min_sum) {
$min_sum = $sum;
$min_key = $key;
}
}
}
if ($min_key !== null) {
unset($array2[$min_key]);
}
return $array2;
}
$array1 = [3];
$array2 = [2, 7, 1, 14];
$result = minimum($array1, $array2);
print_r($result);
Результат будет:
Array
(
[0] => 2
[1] => 7
[3] => 14
)
Для того, чтобы получить третий массив:
Отсортируйте второй массив по возрастанию.
Теперь запускайте единственный цикл. На i-й итерации цикла суммируете i-e элементы первого и второго массива и добавляете к результату.
function minimums($array1, $array2) {
$result = [];
sort($array2);
for ($i = 0; $i < count($array1); $i++)
$result[] = $array1[$i] + $array2[$i];
return $result;
}
$array1 = [3, 5, 1];
$array2 = [2, 7, 1];
print_r(minimums($array1, $array2));
Результат:
Array
(
[0] => 4
[1] => 7
[2] => 8
)