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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。