2017-02-13 97 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