我有下面的代码,它不区分大小写地将关联元素分组到一个平面数组中,并对相关值求和,但我真的不明白它是如何工作的。
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 );
在这一部分中,它如何识别数组中相同的键来求和(因为键的位置是动态的)?
3条答案
按热度按时间rryofs0p1#
$sums
一开始是一个空数组,但是我们试图向它添加数字。如果我们试图向$sums[$key]
添加一个尚未初始化的数字,我们会得到一个错误,所以我们在第一次遇到它时将它设置为零来初始化它。这是上一行的第二部分。
$sums[$key]
在这一点上要么是零,感谢上一行,要么是一个整数,因为我们之前在循环中遇到过它。$sums[$key]
中的$key
在此代码中将是'TEST'或'KEY'。rur96b6h2#
此代码按大写键组求和.
第一步:检查键是否存在。如果不存在,则填充初始值零。这种情况对于每个键(组的基础)发生一次。这是必要的,以便键的不存在不会在下一步中造成问题。
if(!isset($sums[$key])){ $sums[$key] = 0;}
第二步:将值添加到现有的密钥容器:
$sum [$key] =($sum [$key] + $瓦尔);
nnvyjq4y3#
这意味着如果
key
或test
没有值,则将值分配为0。例如,
$array = ['KEY', 'TEST' => 3, 'Test' => 10, 'Key'=> 2];
KEY
的值为0。$sums[$key]
是相同元素的总和。$sums[$key] + $val
意味着将先前的总和值添加到新的元素值。