在php中获取两个关联数组的总和和差异

时间:2018-06-01 11:54:52

标签: php

我有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 但没有什么能满足我的需求。 请帮忙

3 个答案:

答案 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);
?>

Live Demo

With simple foreach loop

If some data exist only in single array