php 通过将所有键强制转换为大写来对1d数组数据进行分组和求和

1dkrff03  于 2023-04-19  发布在  PHP
关注(0)|答案(3)|浏览(130)

我有下面的代码,它不区分大小写地将关联元素分组到一个平面数组中,并对相关值求和,但我真的不明白它是如何工作的。

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)

我在上面代码的两个部分有问题,一个是:

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

另一个是:

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

在这一部分中,它如何识别数组中相同的键来求和(因为键的位置是动态的)?

rryofs0p

rryofs0p1#

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

$sums一开始是一个空数组,但是我们试图向它添加数字。如果我们试图向$sums[$key]添加一个尚未初始化的数字,我们会得到一个错误,所以我们在第一次遇到它时将它设置为零来初始化它。

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

这是上一行的第二部分。$sums[$key]在这一点上要么是零,感谢上一行,要么是一个整数,因为我们之前在循环中遇到过它。
$sums[$key]中的$key在此代码中将是'TEST'或'KEY'。

rur96b6h

rur96b6h2#

此代码按大写键组求和.
第一步:检查键是否存在。如果不存在,则填充初始值零。这种情况对于每个键(组的基础)发生一次。这是必要的,以便键的不存在不会在下一步中造成问题。
if(!isset($sums[$key])){ $sums[$key] = 0;}
第二步:将值添加到现有的密钥容器:
$sum [$key] =($sum [$key] + $瓦尔);

nnvyjq4y

nnvyjq4y3#

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

这意味着如果keytest没有值,则将值分配为0。
例如,$array = ['KEY', 'TEST' => 3, 'Test' => 10, 'Key'=> 2];
KEY的值为0。

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

$sums[$key]是相同元素的总和。$sums[$key] + $val意味着将先前的总和值添加到新的元素值。

相关问题