Search code examples
phparraysmultidimensional-arraysumgrouping

Group and sum mapped values from two flat arrays of equal length


I have two arrays. They are always the same length. If the first array element value is the same then sum of the second array element value.

Example

$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);

How do I go about achieving this?


Solution

  • You can use array_sum with array_map like below,

    $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;
    

    Demo

    Output:-

    Array
    (
        [1] => 10
        [2] => 50
        [3] => 50
    )
    Array
    (
        [4] => 60
        [6] => 50
    )