PHP中如何计算两个关联数组的和与差?
解决关联数组的求和与求差问题
没问题,我来帮你搞定这个关联数组的数值运算需求!你之前用的array_merge、array_diff、array_combine其实都不是用来做对应键的数值加减的,所以达不到预期结果很正常:
array_merge是合并数组,相同键的元素会被后面的覆盖,不是求和;array_diff是找两个数组的键值对差集,不是数值相减;array_combine是用一个数组做键、另一个做值生成新数组,和数值运算完全不沾边。
解决方案:遍历数组做数值运算
我们可以通过遍历数组的键,对每个键对应的数值分别做加减运算,还能兼容两个数组键不完全一致的情况:
1. 先定义你的两个数组
$arr1 = array('cat' => 5, 'dog' => 2); $arr2 = array('cat' => 1, 'dog' => 2);
2. 计算求和数组(arr3)
$arr3 = []; // 获取两个数组的所有唯一键,避免遗漏某一方独有的键 $allKeys = array_unique(array_merge(array_keys($arr1), array_keys($arr2))); foreach ($allKeys as $key) { // 若某个数组没有该键,默认值设为0 $val1 = isset($arr1[$key]) ? $arr1[$key] : 0; $val2 = isset($arr2[$key]) ? $arr2[$key] : 0; $arr3[$key] = $val1 + $val2; } // 最终arr3结果:array('cat' => 6, 'dog' => 4)
3. 计算求差数组(arr4)
$arr4 = []; foreach ($allKeys as $key) { $val1 = isset($arr1[$key]) ? $arr1[$key] : 0; $val2 = isset($arr2[$key]) ? $arr2[$key] : 0; $arr4[$key] = $val1 - $val2; } // 最终arr4结果:array('cat' => 4, 'dog' => 0)
简化版(当确定两个数组键完全一致时)
如果你能保证两个数组的键完全相同,那可以直接遍历其中一个数组的键,代码更简洁:
// 简化求和 $arr3 = []; foreach ($arr1 as $key => $val) { $arr3[$key] = $val + $arr2[$key]; } // 简化求差 $arr4 = []; foreach ($arr1 as $key => $val) { $arr4[$key] = $val - $arr2[$key]; }
这样就能完美得到你想要的和数组与差数组啦!
内容的提问来源于stack exchange,提问作者athira
相关产品推荐
相关产品推荐

