PHP - 如果其他3个键值匹配

时间:2015-10-09 05:12:07

标签: php arrays multidimensional-array

我有一个阵列,在几个国家/地区拥有多年的总销售额。下面是阵列的小样本。一些国家以几种不同的货币进行销售,但现在转换为相同的货币。现在我需要将这些总销售额加在一起,其中Year,Month和Country值相同但仍然保持相似的结构。

如果[“年”]的值和& [“月”]& [“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"
}

1 个答案:

答案 0 :(得分:1)

做类似

的事情
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),这将返回您想要的完全相同的数组。