合并数组时计算第一对相同键值对的总和 - php

时间:2016-11-16 15:25:33

标签: php arrays

我有两个不同的数组:

数组1:

array(5) {
  [0]=>
  array(2) {
    ["all_totals"]=>
    string(1) "3"
    ["month_name"]=>
    string(3) "Jul"
  }
  [1]=>
  array(2) {
    ["all_totals"]=>
    string(2) "20"
    ["month_name"]=>
    string(3) "Aug"
  }
  [2]=>
  array(2) {
    ["all_totals"]=>
    string(2) "10"
    ["month_name"]=>
    string(3) "Sep"
  }
  [3]=>
  array(2) {
    ["all_totals"]=>
    string(2) "14"
    ["month_name"]=>
    string(3) "Oct"
  }
  [4]=>
  array(2) {
    ["all_totals"]=>
    string(3) "102"
    ["month_name"]=>
    string(3) "Nov"
  }
}

数组2:

array(2) {
  [0]=>
  array(2) {
    ["all_totals"]=>
    string(1) "9"
    ["month_name"]=>
    string(3) "Oct"
  }
  [1]=>
  array(2) {
    ["all_totals"]=>
    string(2) "30"
    ["month_name"]=>
    string(3) "Nov"
  }
}

为了加入它们并且只有一个foreach循环,我将它们合并:

$result = array_merge($array1, $array2);
foreach($result as $item){
   //my actions here
}

但是你注意到我在两个数组中都有相同的key =>值对。唯一的区别是["all_totals"]值。例如,

["all_totals"]=>"14", ["month_name"]=> "Oct"  和
["all_totals"]=> "9", ["month_name"]=> "Oct"

合并时我想检查是否有这样的键值对并通过一个这样的元素加入它们但加上[" all_totals"]值以便我不会丢失任何数据。因此,在最终结果中,我将有一个这样的元素:

["all_totals"]=>"23", ["month_name"]=> "Oct"

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

罗马的这种方式怎么样:

$coll=array();
foreach(array($arr,$arr2) as $array){
 foreach($array as $a){
  if(!isset($coll[$a['month_name']])){
    $coll[$a['month_name']]=$a;
  } else {
    $coll[$a['month_name']]['all_totals'] += $a['all_totals'];
  }
 }
}
ksort($coll);
print_r(array_values($coll));