如何对具有相同密钥但不同敏感度的php数组求和

问题描述 投票:0回答:3

我想对相同但不同情况下的键的值求和。

假设我们有这个数组

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

print_r($array);
/*
['KEY'] => 7,
['TEST'] => 13
*/
?>
php arrays
3个回答
3
投票

循环遍历键和值。将每个键转换为大写。在第二个数组中,将键/值设置为该数组中当前值(如果不存在则为 0)加上循环中达到的值的总和。

我使用 null 合并运算符

??
来确定是否设置了数组键,如果没有设置,则使用值 0。(这可以防止 PHP 抛出“注意:尝试访问 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);

结果:

array(2) {
  ["KEY"]=>
  int(7)
  ["TEST"]=>
  int(13)
}

1
投票

使用

foreach
循环遍历通过函数传递的数组键和值,使用
strtoupper
将键转换为大写。

在循环内部,我使用

isset
检查键是否存储在求和表中,然后将值添加到求和数组中的键上,以防止在尝试将值相加在一起时出现任何错误。使用
!
指的是 false 或者更简单地说“不是”,所以说 !isset 正在询问代码是否未设置该数组键。如果 sum 数组中没有设置,那么我们将键添加到值 0 中,然后在其顶部添加该值。循环完成后,我们返回 sums 数组,然后将其存储在函数外部的 $sums 变量中。

在 add_array_vals 函数之外,您可以使用另一个

foreach
循环来访问值。

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)

0
投票

我找到了这个问题的答案:

<?php
$array = ['KEY'=> 5,'TEST' => 3,'Test' => 10,'Key'=> 2];
$final = [];
foreach($array as $key => $value){
    $final[strtoupper($key)] = ($final[strtoupper($key)] ?? 0)+$value;
}
print_r($final)
?>
© www.soinside.com 2019 - 2024. All rights reserved.