Home > Mobile >  How foreach loop work to sum value of same key in associative array
How foreach loop work to sum value of same key in associative array

Time:10-31

I have associative array.Operation of the below code is that it will sum all the array index's value which key is similar, but i did not understand how it operated.

function add_array_vals($arr) {
  $sums = [];
  foreach ( $arr as $key => $val ) {
    $key = strtoupper($key);
    if ( !isset($sums[$key]) ) {
      $sums[$key] = 0;
    }
    $sums[$key] = ( $sums[$key]   $val );
  }
  return $sums;
}

$array = ['KEY' => 5, 'TEST' => 3, 'Test' => 10, 'Key'=> 2];
$sums = add_array_vals($array);
var_dump($sums);

//Outputs
// KEY => int(7)
// TEST => int(13)

i have problem in two portion of above code one is:

if ( !isset($sums[$key]) ) { $sums[$key] = 0; }

another is:

$sums[$key] = ( $sums[$key] $val );

In this portion,how it identify the same key of array to sum them because keys position is random.

It will be really helpful if anyone clarify it.

CodePudding user response:

if ( !isset($sums[$key]) ) { $sums[$key] = 0; }

$sums starts as an empty array, but we're trying to add numbers to it. If we try to add a number to $sums[$key] that isn't initialized yet, we'll get an error, so we initialize it by setting it at zero the first time we encounter it.

$sums[$key] = ( $sums[$key]   $val );

This is the second part of the previous line. $sums[$key] is at this point either zero, thanks to the previous line, or an integer, because we've encountered it before in the loop.

The $key in $sums[$key] is going to be either 'TEST' or 'KEY' in this code.

CodePudding user response:

if ( !isset($sums[$key]) ) { $sums[$key] = 0; }

This means that if key or test has no value, assign the value 0.

For example, $array = ['KEY', 'TEST' => 3, 'Test' => 10, 'Key'=> 2];

The value of KEY will be 0.

$sums[$key] = ( $sums[$key] $val );

The $sums[$key] is the sum of same elements. $sums[$key] $val means add the previous sum value to the new element value.

CodePudding user response:

This code summing by uppercase keys group.

First step: checked the key exists. If not exists then fill with initial zero value. This case occurs once for per key (base of group). It is necessary so that the key's non-existence does not pose a problem in the next step.

if ( !isset($sums[$key]) ) { $sums[$key] = 0; }

Second step: adds the value to the existed key container:

$sums[$key] = ( $sums[$key] $val );

  • Related