2016-05-21 90 views
0

我試圖使用「array_merge($ a,$ b)」,但這不適用於我正在做的事情。這裏有兩個數組:如何合併兩個多維數組並更新重複項?

$a = 
Array 
(
    [Mike] => Array 
     (
      [100] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [200] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [300] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [400] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

     ) 

) 


$b = 
Array 
(
    [Mike] => Array 
     (
      [500] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [600] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

     ) 

) 

這個概念是用戶「邁克」添加項目到他們的列表(100,200,300,400)。該列表保存在數據庫中。幾天後,邁克登出並開始一個新名單,作爲匿名嘉賓,增加了他的會話中保存的項目(500,600)。當他完成並重新登錄時,我想合併這兩個列表並保存更新的列表。如果我使用「array_merge」,並且由於數組鍵是[Mike],在設計上它完全用$ b替換$ a,而不是將項目號合併在一起。

我該如何結合?同樣,如果兩個列表中的兩個項目相同,例如一個列表中的(100,200,300,400)和第二個列表中的(100,500)(項目編號「100」在這裏是重複的)。我希望第二個列表中的「100」的[數量]和[屬性]字段覆蓋第一個列表中項目「100」的這些字段。

感謝 親切的問候

回答

0

您可以使用下面的代碼。只要確保把最新的結果放在第一位。它會給你你想要的結果。

$c = $b['Mike']+$a['Mike']; 

感謝

+0

非常感謝,它實際上是:$ c ['Mike'] = $ b ['Mike'] + $ a ['Mike']以保持數組結構相同。 (請忽略我之前對第二個問題的評論,我可以用兩個數組上的foreach循環來解決它。) – peppy

1

使用array_replace_recursive函數(「更新重複」):

$result = array_replace_recursive($a, $b); 

print_r($result); 

輸出:

Array 
(
    [Mike] => Array 
     (
      [100] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [200] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [300] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [400] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [500] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [600] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 
     ) 
) 

http://php.net/manual/en/function.array-replace-recursive.php

+0

不幸的是,這導致了一個問題,它將兩個數組組合在一起,但是對於第二個數組。 (500,600)在合併後重置爲(4,5)。 – peppy

+0

這是不正確的。我測試過並添加了輸出。或者,也許你在這兩個陣列中有不同的鍵類型。確保兩個數組都用數字索引 – RomanPerekhrest