phparraysmultidimensional-arraytransposearray-sum

Sum column values from multiple arrays


I have an arrays with dynamic name. My array could be more than 3, depends and array variable should be unique

$loopThrice = 3;
$getSum = 0;
$total = array();

$array0 = array(5, 10, 15, 20, 25, 30);
$array1 = array(1, 2, 3, 4, 5, 6);
$array2 = array(2, 6, 8, 10, 12, 14);

for($a=0; $a < $loopThrice; $a++){ // loop 3x to get unique array name
    foreach (${'array'.$a} as $key => $value) { // $array0, $array1, $array2,  
        //Right here is my problem, I'm not sure if this the correct way to get the sum of $array0,1,2
        
        //get the sum of array0,1,2 -- newarray(8, 18, 26, 34, 42, 50)
        $getSum += 
            //store newarray
            array_push($total, $getSum);     
    }
}

I need to get an output like this:

Array ( 
    [0] => 8
    [1] => 18 
    [2] => 26 
    [3] => 34 
    [4] => 43 
    [5] => 50 
)

Solution

  • Why aren't you using a multidimensional array?

    $array = array(); // hungarian notation
    $array[] = array(5, 10, 15, 20, 25, 30);
    $array[] = array(1, 2, 3, 4, 5, 6);
    $array[] = array(2, 6, 8, 10, 12, 14);
    

    In this case you will have an array of arrays:

    Array
    (
    [0] => Array
        (
            [0] => 5
            [1] => 10
            [2] => 15
            [3] => 20
            [4] => 25
            [5] => 30
        )
    
    [1] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
            [5] => 6
        )
    
    [2] => Array
        (
            [0] => 2
            [1] => 6
            [2] => 8
            [3] => 10
            [4] => 12
            [5] => 14
        )
    )
    

    You can go with nested for loops:

    $sumArray = array();
    $arrayCount = count($array);
    $elementCount = 0;
    
    foreach($array as $subarray)
    {
        $count = count($subarray);
        $elementCount = $elementCount < $count ? $count : $elementCount;
    }
    
    for($i = 0; $i < $elementCount; $i++)
    {
        $sumArray[$i] = 0;
    
        for($j = 0; $j < $arrayCount; $j++)
        {
            $sumArray[$i] += $array[$j][$i];
        }
    }
    
    print_r($sumArray);
    

    The output is

    Array
    (
        [0] => 8
        [1] => 18
        [2] => 26
        [3] => 34
        [4] => 42
        [5] => 50
    )
    

    Now, if you have a disproportioned sub-arrays (i.e. different count of elements in each sub-array), you will still get some sort of result, as missing elements will be assumed to be 0. So, with the input of:

    $array = array(); // hungarian notation
    $array[] = array(5, 10, 15, 20, 25);
    $array[] = array(1, 2, 3, 4, 5, 6);
    $array[] = array(2, 6, 8, 10);
    

    You will still get the result:

    Array
    (
        [0] => 8
        [1] => 18
        [2] => 26
        [3] => 34
        [4] => 30
        [5] => 6
    )