PHP - 合并两个关联数组(如果键存在则添加值)

时间:2016-09-28 22:05:49

标签: php arrays

我有两个关联数组,它们彼此非常相似(但不一样)它们都是独立的数组,我想将它们合并在一起,同时维护这两个数组,这可以通过以下方式完成:

  • 如果键已经存在,确保值ADD(即两个数组都包含键'dragon',第一个数组的值可能是'30',第二个数组的值是'26'我希望它给我' 56'
  • 如果第一个数组中不存在这些键,则只需正常合并。

我尝试过使用$tagItems = array_count_values($tagItems, $tagItems2);但是当我尝试对json进行编码并将其回显时,这只会给我null

我也尝试使用$tagItems = array_merge($tagItems, $tagItems2);这个添加新密钥,但不会合并重复的密钥值(只保留合并的数组值)。

JSON格式的数组看起来像这样,一个数组称为$ tagItems,另一个数组称为$ tagItems2

{
   "game1": 22,
   "game2": 20,
   "game3": 16,
}
{
   "game1": 22,
   "game2": 20,
   "game3": 16,
   "game4": 12,
}

什么允许我这样做?

2 个答案:

答案 0 :(得分:5)

以最短的格式将$b合并到$a

foreach ($b as $key => $value) {
    $a[$key] += $value;
}

Example

但是,最好在写入之前检查数组键是否存在:

if (!array_key_exists($key, $a)) {
    $a[$key] = 0;
}
$a[$key] += $value;

答案 1 :(得分:1)

此方法使用映射并允许任一数组的键不存在于另一个数组中。

$merged = array_fill_keys(array_keys($a + $b), 0);
$sums = array_map(
    function($aVal, $bVal) { return $aVal + $bVal; },
    array_merge($merged, $a),
    array_merge($merged, $b)
);
$merged = array_combine(array_keys($merged), $sums);

Example Fiddle