2016-09-28 78 views
1

我有两个关联数组,他们都非常相似,对方(但不一样),他们都是单独的数组,我想将它们合并在一起,同时保证了可以通过以下方式完成阵列:PHP - 合并两个关联数组(如果键存在增加值)

  • 如果键已经存在,确保值为ADD(即两个数组都包含键“龙”,并且可能在第一个阵列上的值为'30','26 '第二我希望它给我'''''
  • 如果这些键不存在于第一个阵列中,只需将其正常合并即可

我一直在使用$tagItems = array_count_values($tagItems, $tagItems2);尝试,但这个只是给了我null当我尝试JSON编码和回声出来。

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

JSON格式看起来像这样的阵列,一个数组称为$ tagItems,另一种是所谓$ tagItems2

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

什么可以让我做到这一点?

+1

你将不得不环路,虽然他们 – nogad

+0

我认为你需要提取值,那么它们求和,然后再重新组合它 – xYuri

回答

5

在最短的形式要合并$b$a

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

Example

但是,你写它之前,你检查数组项存在是最好的

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

我是在回答但这不是我的答案,这使得短它更好。 +1 – xYuri

+1

@xYuri较短并非越大越好(这是oftern更糟) – nogad

+0

作品完全一样,我想,谢谢 – ConorReidd

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

相关问题