Два одинаковых по длине массива в сумме значений второго значения элемента массива для первого значения элемента массива в php - PullRequest
0 голосов
/ 22 января 2020

У меня есть два массива. Они всегда одинаковой длины. Если первое значение элемента массива совпадает, то сумма второго значения элемента массива.

Пример

$array1 = array(1,2,2,3);
$array2 = array(10,20,30,50);

// I can get the sum of array1 and array2 output.
$array_sum1 = array(10,50,50);


$array3 = array(4,4,4,6);
$array4 = array(10,20,30,50);

// I can get the sum of array3 and array4 output.
$array_sum2 = array(60,50);

Как мне go добиться этого?

Ответы [ 2 ]

2 голосов
/ 22 января 2020

Вы можете использовать array_sum с array_map, как показано ниже,

$array1     = [1, 2, 2, 3];
$array2     = [10, 20, 30, 50];
$array_sum1 = [];
foreach ($array1 as $key => $value) {
    $array_sum1[$value][] = $array2[$key];
}
$array_sum1 = array_map("array_sum", $array_sum1);
print_r($array_sum1);
$array3     = [4, 4, 4, 6];
$array4     = [10, 20, 30, 50];
$array_sum2 = [];
foreach ($array3 as $key => $value) {
    $array_sum2[$value][] = $array4[$key];
}
$array_sum2 = array_map("array_sum", $array_sum2);
print_r($array_sum2);die;

Демо

Вывод: -

Array
(
    [1] => 10
    [2] => 50
    [3] => 50
)
Array
(
    [4] => 60
    [6] => 50
)
1 голос
/ 22 января 2020

Косвенно выполнять две итерации ваших данных для группировки и суммирования.

Используйте значения "id" в качестве ключей в вашем выходном массиве. Если данный «id» встречается в первый раз, то сохраните значение «val» в «id»; после первой встречи добавьте «val» к «id».

Код: ( Demo )

$ids = [1, 2, 2, 3];
$vals = [10, 20, 30, 50];

foreach ($ids as $index => $id) {
    if (!isset($result[$id])) {
        $result[$id] = $vals[$index];
    } else {
        $result[$id] += $vals[$index];
    }
}
var_export($result);

Вывод:

array (
  1 => 10,
  2 => 50,
  3 => 50,
)

Вот похожие (почти дубликаты) ответы:

...