douzhuangxuan3268 2017-02-13 22:09
浏览 43
已采纳

PHP合并具有重复键的关联数组

I have an array like this:

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

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

How would I merge them so that it will become like this:

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

I tried array_merge but it only kept data from the first array.

Edit: Notice how the length and order of the array can be different.

  • 写回答

1条回答 默认 最新

  • dsg435665475 2017-02-13 22:12
    关注

    Use array_replace_recursive function:

    $array1 = ['Utah'=>['users'=>5],'California'=>['users'=>10]];
    $array2 = ['Utah'=>['emails'=>18],'California'=>['emails'=>28]];
    
    $result = array_replace_recursive($array1, $array2);
    
    print_r($result);
    

    The output:

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

    Update:
    Though you have changed your initial requirements I also have solution for your new input data.
    Used functions: array_merge and array_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);
    

    The output:

    Array
    (
        [0] => Array
            (
                [State] => Utah
                [users] => 5
                [emails] => 18
            )
    
        [1] => Array
            (
                [State] => California
                [users] => 10
                [emails] => 28
            )
    
        [2] => Array
            (
                [State] => Arizona
                [emails] => 32
            )
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog