2017-02-13 206 views
-3

我有一個這樣的數組:PHP合併關聯數組

$array1 = [ 
    ['State'=>'Utah', 'users'=>5], 
    ['State'=>'California', 'users'=>10] 
] 

$array2 = [ 
    ['State'=>'Utah', 'emails'=>18], 
    ['State'=>'Arizona', 'emails'=>32], 
    ['State'=>'California', 'emails'=>28], 
] 

如何將它們合併,這樣它會變成這個樣子:

$mergedArray = [ 
    ['State'=>'Utah', 'users'=>5, 'emails'=>18], 
    ['State'=>'Arizona', 'emails'=>32], 
    ['State'=>'California', 'users'=>10, 'emails'=>28] 
] 

我試圖array_merge但它只保留了第一個數組的數據。

編輯:請注意數組的長度和順序可能會有所不同。

+0

謝謝你,你是對的 – Jordash

回答

2

使用array_replace_recursive功能:

$array1 = ['Utah'=>['users'=>5],'California'=>['users'=>10]]; 
$array2 = ['Utah'=>['emails'=>18],'California'=>['emails'=>28]]; 

$result = array_replace_recursive($array1, $array2); 

print_r($result); 

輸出:

Array 
(
    [Utah] => Array 
     (
      [users] => 5 
      [emails] => 18 
     ) 

    [California] => Array 
     (
      [users] => 10 
      [emails] => 28 
     ) 
) 

更新:
雖然你已經改變了最初的要求,我也有解決方案爲您輸入數據。
使用的功能:array_mergearray_values

// user data 
$array1 = [ 
    ['State'=>'Utah', 'users'=>5], 
    ['State'=>'California', 'users'=>10] 
]; 

// email data 
$array2 = [ 
    ['State'=>'Utah', 'emails'=>18], 
    ['State'=>'Arizona', 'emails'=>32], 
    ['State'=>'California', 'emails'=>28], 
]; 

$result = []; 
foreach (array_merge($array1, $array2) as $item) { 
    if (isset($result[$item['State']])) { 
     $result[$item['State']] = array_merge($result[$item['State']], $item); 
    } else { 
     $result[$item['State']] = $item; 
    } 
} 
$result = array_values($result); 

print_r($result); 

輸出:

Array 
(
    [0] => Array 
     (
      [State] => Utah 
      [users] => 5 
      [emails] => 18 
     ) 

    [1] => Array 
     (
      [State] => California 
      [users] => 10 
      [emails] => 28 
     ) 

    [2] => Array 
     (
      [State] => Arizona 
      [emails] => 32 
     ) 
) 
+0

我才意識到該陣列的結構比我想象的不同,否則這個作品 – Jordash

+0

我更新問題顯示陣列實際上是什麼 – Jordash

+0

@Jordash,什麼是不工作?我對你的新的陣列測試,它給了我:'陣列 ( [0] =>陣列 ( [狀態] =>猶他州 [用戶] => 5 [郵件] => 18 ) [1] =>陣列 ( [狀態] =>加州 [用戶] => 10 [郵件] => 28 ) )'如你預期 – RomanPerekhrest