PHP -如果有3个其他键值匹配,则对匹配键值求和


PHP - Sum values of a matching key if 3 other key values match

我有一个数组,其中包含几个国家多年的总销售额。下面是该数组的一个小样本。一些国家的销售额以几种不同的货币计价,但现在被转换成同一种货币。现在我需要将这些总销售额加在一起,其中Year, Month和Country值是相同的,但仍然保持类似的结构。

If values of ["Year"] &["月"],["Country"]匹配,然后我需要对["Total_Sales"]的值求和,并保持相同的数组结构。

我不知道从哪里开始。我肯定有一个foreach循环或2。

这是数组

array(6) {
  [0]=>
  array(4) {
    ["Year"]=>
    string(4) "2014"
    ["Month"]=>
    string(2) "12"
    ["Country"]=>
    string(2) "NZ"
    ["Total_Sales"]=>
    float(8.25)   
  }
  [1]=>
  array(4) {
    ["Year"]=>
    string(4) "2014"
    ["Month"]=>
    string(2) "12"
    ["Country"]=>
    string(2) "NZ"
    ["Total_Sales"]=>
    string(6) "5.50"
  }
  [2]=>
  array(4) {
    ["Year"]=>
    string(4) "2014"
    ["Month"]=>
    string(2) "12"
    ["Country"]=>
    string(2) "US"
    ["Total_Sales"]=>
    string(9) "10.05"
  }
  [3]=>
  array(4) {
    ["Year"]=>
    string(4) "2015"
    ["Month"]=>
    string(1) "1"
    ["Country"]=>
    string(2) "NZ"
    ["Total_Sales"]=>
    float(9.50)
  }
  [4]=>
  array(4) {
    ["Year"]=>
    string(4) "2015"
    ["Month"]=>
    string(1) "1"
    ["Country"]=>
    string(2) "NZ"
    ["Total_Sales"]=>
    string(6) "15.00"
  [5]=>
  array(4) {
    ["Year"]=>
    string(4) "2015"
    ["Month"]=>
    string(2) "1"
    ["Country"]=>
    string(2) "US"
    ["Total_Sales"]=>
    string(9) "6.00"
}

下面是我想要的结果:

array(4) {
  [0]=>
  array(4) {
    ["Year"]=>
    string(4) "2014"
    ["Month"]=>
    string(2) "12"
    ["Country"]=>
    string(2) "NZ"
    ["Total_Sales"]=>
    float(13.75)
  }
  [1]=>
  array(4) {
    ["Year"]=>
    string(4) "2014"
    ["Month"]=>
    string(2) "12"
    ["Country"]=>
    string(2) "US"
    ["Total_Sales"]=>
    string(9) "10.05"
  }
  [2]=>
  array(4) {
    ["Year"]=>
    string(4) "2015"
    ["Month"]=>
    string(1) "1"
    ["Country"]=>
    string(2) "NZ"
    ["Total_Sales"]=>
    float(24.50)
  }
  [3]=>
  array(4) {
    ["Year"]=>
    string(4) "2015"
    ["Month"]=>
    string(2) "1"
    ["Country"]=>
    string(2) "US"
    ["Total_Sales"]=>
    string(9) "6.00"
}

foreach($currentArray as $value){
    $newArraykey = $value["country"]."-".$value["Year"]."-".$value["month"]
    if(isset($newArray[$newArraykey])){
        $newArray[$newArraykey]["Total_Sales"] = $newArray[$newArraykey]["Total_Sales"] + $value["Total_Sales"];
    }else{
        $newArray[$newArraykey] = $value;
    }
}

$newArray类似于

array(4) {
  [NZ-2014-12]=>
  array(4) {
    ["Year"]=>
    string(4) "2014"
    ["Month"]=>
    string(2) "12"
    ["Country"]=>
    string(2) "NZ"
    ["Total_Sales"]=>
    float(13.75)
  }
  [US-2014-12]=>
  array(4) {
    ["Year"]=>
    string(4) "2014"
    ["Month"]=>
    string(2) "12"
    ["Country"]=>
    string(2) "US"
    ["Total_Sales"]=>
    string(9) "10.05"
  }
  [NZ-2015-1]=>
  array(4) {
    ["Year"]=>
    string(4) "2015"
    ["Month"]=>
    string(1) "1"
    ["Country"]=>
    string(2) "NZ"
    ["Total_Sales"]=>
    float(24.50)
  }
  [US-2015-1]=>
  array(4) {
    ["Year"]=>
    string(4) "2015"
    ["Month"]=>
    string(2) "1"
    ["Country"]=>
    string(2) "US"
    ["Total_Sales"]=>
    string(9) "6.00"
}

如果您不想要像国家/年/月这样的键,他们使用array_values($newArray),这将返回与您想要的完全相同的数组。