skip to Main Content

I want to sum the value of keys that are the same but in diffrent case.

Let’s say we have this array

<?php 
$array = ['KEY'=> 5, ,'TEST' => 3,'Test' => 10,'Key'=> 2];
//---
a function to sum
//---

print_r($array);
/*
['KEY'] => 7,
['TEST'] => 13
*/
?>

3

Answers


  1. Chosen as BEST ANSWER

    I found an answer for this question :

    <?php
    $array = ['KEY'=> 5,'TEST' => 3,'Test' => 10,'Key'=> 2];
    $final = array();
    foreach($array as $key => $value){
        $final[strtoupper($key)] = ($final[strtoupper($key)] ?? 0)+$value;
    }
    print_r($final)
    ?>
    

  2. Use a foreach loop to loop through the array keys and values passed through the function, convert the keys to uppercase using strtoupper.

    Inside the loop I’ve used isset to check if the key is stored inside the sums table before adding the value onto the key in the sums array to prevent any errors when trying to add values together. The use ! refers to false or in simplier terms "is not" so saying !isset is asking the code if that array key is not set. If it isn’t set in the sums array then we add the key in with the value 0 then add the value on top of it. Once the loop is complete we then return the sums array which is then stored in the the $sums variable outside the function.

    Outside add_array_vals function, you can then use another foreach loop to access the values.

    function add_array_vals($arr) {
      // Start an empty count array
      $sums = [];
      foreach ( $arr as $key => $val ) {
        // Convert the key to uppercase
        $key = strtoupper($key);
        // Check if the key is already set 
        //when false it well set the key with the value 0
        if ( !isset($sums[$key]) ) {
          $sums[$key] = 0;
        }
        // $sums[$key] targets the key inside the sums table
        // Since it is stored above, add $val onto what is already there
        $sums[$key] = ( $sums[$key] + $val );
      }
      return $sums;
    }
    
    $array = ['KEY' => 5, 'TEST' => 3, 'Test' => 10, 'Key'=> 2];
    $sums = add_array_vals($array);
    foreach ( $sums as $key => $sum ) {
      echo "The count for ". $key ." is: ". $sum;
    }
    
    var_dump($sums);
    //Outputs
    // KEY => int(7)
    // TEST => int(13)
    
    Login or Signup to reply.
  3. Loop through the keys and values. Convert each key to uppercase. In a 2nd array, set the key/value to the sum of the current value in that array (or 0 if it doesn’t exist) plus the value you are up to in the loop.

    I’m using the null coalescing operator ?? to determine whether the array key is set, and if not then use the value 0. (This prevents PHP from throwing a "Notice: Trying to access array offset on value of type null…")

    $array = ['KEY'=> 5, 'TEST' => 3,'Test' => 10,'Key'=> 2];
    
    $array2 = [];
    foreach ( $array as $k => $v ) {
        $k = strtoupper($k);
        $array2[ $k ] = $v + ( $array2[$k] ?? 0 );
    }
    
    var_dump($array2);
    

    Result:

    array(2) {
      ["KEY"]=>
      int(7)
      ["TEST"]=>
      int(13)
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search