You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP不区分大小写分组一维数组并求和代码逻辑解析求助

不区分大小写分组关联数组求和的PHP代码解析

先看你提供的完整代码:

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数组里出现过,就先给它赋值为0。
  • 比如第一次遍历到KEY时,$sums['KEY']不存在,直接执行加法会抛出“未定义索引”的错误,先初始化0就能正常执行后续操作。

第二处:累加对应分组的值

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

这是实现求和的核心步骤:

  • 如果是第一次处理这个分组键(已初始化为0),就是0 + 当前值$val,相当于把第一个值存入sums数组。
  • 如果不是第一次处理(比如原数组里的Key转大写后也是KEY),就会把当前的$val加到sums数组中该键已有的总和上,实现累加。

动态识别相同键的原理

代码通过strtoupper($key)将所有原数组的键统一转为大写,直接解决了大小写差异的问题:

  • 原数组中的KEY、Key会被转为同一个大写键KEY;TEST、Test会被转为TEST。
  • 遍历过程中,只要遇到相同的大写键,就会复用sums数组中已有的索引,把对应的值累加进去,从而实现不区分大小写的分组求和。

内容的提问来源于stack exchange,提问作者Chunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:45:40