我有两个数组:
$A = array("EUR" => 10, "USD" => 20)
$B = array("EUR" => 10, "JPY" => 20)
我想合并并求和具有相同键的值。
$C = array(
"EUR" => 20, // array(10, 10),
"JPY" => 20,
"USD" => 20,
)
使用此代码:
<?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 中。
代码:(演示)
$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);