合并两个平面关联数组并对共享键的值求和

问题描述 投票:0回答:2

我有两个数组:

$A = array("EUR" => 10, "USD" => 20)
$B = array("EUR" => 10, "JPY" => 20)

我想合并并求和具有相同键的值。

$C = array(
    "EUR" => 20, // array(10, 10),
    "JPY" => 20,
    "USD" => 20,
)
php arrays sum associative-array merging-data
2个回答
2
投票

使用此代码:

<?php
$A = array("EUR"=>10,"USD"=>20);
$B = array("EUR"=>10,"JPY"=>20);

$C = $A;
foreach ($B as $key => $value) {
    if (isset($C[$key])) {
        $C[$key] = $C[$key] + $value;
    } else {
        $C[$key] = $value;
    }
}

结果将是以下数组:

array(3) {
  ["EUR"] => int(20)
  ["USD"] => int(20)
  ["JPY"] => int(20)
}

它已经计算出总和。如需证明,请参阅 http://codepad.org/Aay0bEh9

如果您确实希望结果数组 $C 中的 EUR 条目成为数组(10, 10),您可以将 foreach 循环体更改为以下代码:

if (! isset($C[$key])) {
    $C[$key] = array();
}
$C[$key][] = $value;

编辑:

对于我的最后一句话和代码示例,您可以简单地执行以下操作,而不是更改 foreach 的主体:

$C = array_merge_recursive($A, $B);

0
投票

将第一个数组保存为结果数组的初始数据。 然后循环第二个数组并将当前值添加到预先存在的键的值或 0 中。

代码:(演示

$A = ["EUR" => 10, "USD" => 20];
$B = ["EUR" => 10, "JPY" => 20];

$result = $A;
foreach ($B as $k => $v) {
    $result[$k] = ($result[$k] ?? 0) + $v;
}
var_export($result);
© www.soinside.com 2019 - 2024. All rights reserved.