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

PHP扁平化关联数组:按值分组并对键求和的实现需求

PHP数组按值分组并对键求和的解决方案

没问题,这事儿不难,我给你两种实用的实现思路,都是PHP里常用的方法,你按需选就行~

首先明确你的需求:原数组的键是数字字符串,值存在重复,我们要把值相同的项归为一组,再把每组对应的所有键求和,最终得到「原数组值为新键、键的和为新值」的目标数组。

方法一:foreach循环(直观易懂,新手友好)

这是最容易理解的写法,逻辑清晰,后续维护也方便:

// 你的原数组
$array = array( '7'=>'15', '20'=>'6', '11'=>'9', '14'=>'6', '4'=>'15' );

// 初始化结果数组
$result = [];

// 遍历原数组的每个键值对
foreach ($array as $key => $value) {
    // 把字符串类型的键转成整数,避免意外的字符串拼接(PHP虽会自动转换,但手动转更稳妥)
    $keyInt = (int)$key;
    
    // 如果当前值已在结果数组中,就把键加到对应的值上
    if (isset($result[$value])) {
        $result[$value] += $keyInt;
    } else {
        // 第一次遇到这个值,直接把键作为初始值存入
        $result[$value] = $keyInt;
    }
}

// 输出结果
print_r($result);

运行后会得到你想要的结果:

Array
(
    [15] => 11
    [6] => 34
    [9] => 11
)

方法二:array_reduce(简洁写法,适合函数式编程爱好者)

如果想让代码更紧凑,可以用array_reduce函数,通过迭代数组来生成目标结构:

$array = array( '7'=>'15', '20'=>'6', '11'=>'9', '14'=>'6', '4'=>'15' );

$result = array_reduce(array_keys($array), function($carry, $key) use ($array) {
    $value = $array[$key];
    $keyInt = (int)$key;
    
    $carry[$value] = isset($carry[$value]) ? $carry[$value] + $keyInt : $keyInt;
    return $carry;
}, []);

print_r($result);

这个方法和foreach的逻辑完全一致,只是用数组迭代函数实现,代码更简洁,但对新手来说可能不如foreach直观。

小提醒

为什么要把键转成整数?因为原数组的键是'7'、'20'这类字符串型数字,虽然PHP做加法时会自动转换类型,但手动转换能避免潜在的意外(比如键包含非数字字符的情况),让代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:12:39