我有2个数组。
arr1 =array('cat'=>5,'dog'=>2);
arr2 = array('cat'=>1,'dog'=>2);
我需要得到2个数组的总和以及这些数组的差异。
arr3 = array(cat =>6,dog =>4);
arr4 = array(cat =>4 ,dog =>0);
我尝试使用array_merge,array_diff,array_combine
但没有什么能满足我的需求。
请帮忙
答案 0 :(得分:1)
假设我们在两个数组中都有相同数量的相似键,我们可以迭代一个或另一个,找到并使用属于另一个由相同命名键标识的相应值。
<?php
$a1 = array('cat'=>5,'dog'=>2);
$a2 = array('cat'=>1,'dog'=>2);
foreach($a1 as $k => $v)
{
$add[$k] = $v + $a2[$k];
$sub[$k] = $v - $a2[$k];
}
var_dump($add, $sub);
输出:
array(2) {
["cat"]=>
int(6)
["dog"]=>
int(4)
}
array(2) {
["cat"]=>
int(4)
["dog"]=>
int(0)
}
答案 1 :(得分:0)
您始终可以使用array_sum
解决第一个问题。
第二个更有趣,我用array_map解决它。查看行动here
$subtracted = array_map(function ($x, $y) {
return $x - $y;
}, $arr1, $arr2);
$result = array_combine(array_keys($arr1), $subtracted);
请注意,您也可以通过在上面的示例中将-
替换为+
来解决第一个问题。
另请注意,array_map通常更具可读性。
答案 2 :(得分:0)
简单的foreach可以做到这一点,下面的示例如果缺少某个键并且只是在-ve
否定符号中得到差异,4
的差异将是-4
而不是1 cat - 5 cat
}
<?php
$arr1 =array('cat'=>5,'dog'=>2);
$arr2 = array('cat'=>1,'dog'=>2);
$sum= [];
$sub= [];
foreach(array_merge($arr1,$arr2) as $k=>$v){
$a1 = $arr1[$k] ?? 0;
$a2 = $arr2[$k] ?? 0;
$sum[$k] = $a1 + $a2;
$sub[$k] = abs($a1 - $a2);
}
print_r($sum);
print_r($sub);
?>