You need to enable JavaScript to run this app. PHP foreach因关联数组键大小写差异出现额外迭代 需合并不同大小写的同键值
优惠活动
大模型
产品
解决方案
定价
更多

PHP foreach因关联数组键大小写差异出现额外迭代 需合并不同大小写的同键值

PHP 关联数组键大小写合并实现方案

PHP 关联数组的键本身大小写敏感,拼写完全一致但仅大小写不同的键会被判定为独立条目,直接遍历自然会产生多余的迭代。针对你的场景可以按以下逻辑实现合并:

核心处理逻辑

  • 以「统一转小写的键名」作为匹配的唯一判定标准,只要两个键转小写后字符串完全一致,就判定为需要合并的条目
  • 合并时直接对同标识下的数值做累加,既可以保留原有键名格式,也可以按需统一为指定的命名规则
  • 合并完成后再执行foreach遍历,就不会出现重复统计的问题

可直接套用的代码实现

如果希望合并后保留原有驼峰格式的键(匹配你示例里SourceTwo/SourceThree的命名风格),可以使用以下高效逻辑(通过映射表匹配大小写,数据量大时也不会有性能问题):

// 初始化合并后的结果容器、键映射表
$merged_conversion = [];
$key_mapping = [];
// 取待处理的原始数据
$raw_source_data = $this->daily_conversion_data['cnb_utm_totals'];

foreach ($raw_source_data as $origin_key => $value) {
    // 把当前键转小写作为匹配标识
    $lower_key = strtolower($origin_key);
    // 查映射表判断是否已经存在对应条目
    if (isset($key_mapping[$lower_key])) {
        $actual_stored_key = $key_mapping[$lower_key];
        // 匹配到已有条目,直接累加数值
        $merged_conversion[$actual_stored_key] += $value;
    } else {
        // 无匹配则记录映射关系,新增条目保留原始键名
        $key_mapping[$lower_key] = $origin_key;
        $merged_conversion[$origin_key] = $value;
    }
}

结果适配说明

针对你给出的示例数组,上述逻辑跑通后的初始合并结果为:

[
    "sourceone" => 62, // 原sourceone的56 + SourceOne的6 累加结果
    "SourceTwo" => 76,
    "SourceThree" => 55
]

如果需要把首项的键名替换为你要求的SourceOne格式,只需要在合并完成后做一次键名替换即可:

// 调整键名为指定格式
unset($merged_conversion['sourceone']);
$merged_conversion['SourceOne'] = 62;

如果不想手动调整键名,可以在遍历原始数组前先对数组按键名做驼峰格式的排序,让SourceOne这类标准格式的键排在同标识条目的最前面,合并时自然会优先保留这个格式的键名,不需要额外修改。也可以在新增条目时直接用字符串处理函数统一格式化键名,跳过对原始键名的依赖。

合并完成后,你原有的foreach循环只需要替换遍历源即可:

// 用合并后的数组作为遍历源
foreach($merged_conversion as $utm_source => $utm_data) {
    // 原有业务逻辑直接复用即可
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 08:36:04