Суммировать элементы первого массива с элементами второго, найти минимальное и удалить элемент из второго массива

Есть два одномерных массива. Число элементов в каждом более 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
)
→ Ссылка
Автор решения: MBo

Для того, чтобы получить третий массив:

Отсортируйте второй массив по возрастанию.

Теперь запускайте единственный цикл. На 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
)
→ Ссылка