2016-09-28 80 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

相關問題