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
相关产品推荐
相关产品推荐

