【问题标题】:Merge array where same key [duplicate]合并相同键的数组[重复]
【发布时间】:2018-12-05 23:55:34
【问题描述】:
I have following 2 arrays:

$arr1 = [
   0 => [
      'id' => 1,
      'name' => 'Peter',
   ],
   1 => [
      'id' => 2,
      'name' => 'John',
   ]
]

$arr2 = [
   0 => [
      'id' => 1,
      'surname' => 'Newman',
   ],
   1 => [
      'id' => 2,
      'surname' => 'Cena',
   ]
]

我想要做的是合并这些引用同一个键的数组。在这种情况下,我想将它们合并到 id 匹配的位置。所以我期望的输出是:

$finalArr = [
       0 => [
          'id' => 1,
          'name' => 'Peter',
          'surname' => 'Newman',
       ],
       1 => [
          'id' => 2,
          'name' => 'John',
          'surname' => 'Cena',
       ]
    ]

我正在使用 laravel,但语言应该不太重要。如果可能,我想使用collections

【问题讨论】:

  • 代码在哪里?
  • @Ghost 是的,你是对的,我的错,我写的是“with”而不是“where”!只是一个习惯,我看到的关于 php 和数组的 80% 的问题都是重复的,所以......:x

标签: php arrays laravel collections laravel-5.5


【解决方案1】:

您可以使用array_maparray_merge 并检查键是否匹配:

$finalArr = array_map(function($x) use ($arr2) {
    foreach($arr2 as $b) {
        if ($x["id"] === $b["id"]) {
            return array_merge($x, $b);
        }
    }
    return $x;
}, $arr1);

var_dump($finalArr);

Demo

【讨论】:

  • 也感谢提供演示(:
【解决方案2】:

试试这个:

foreach ($arr2 as $key2 => $value2) {
    foreach ($arr1 as $key1 => $value1) {
        if($value2['id'] == $value1['id']){
            $arr1[$key1] = array(
                'id' =>  $value1['id'],
                'name' => $value1['name'],
                'surname' => $value2['surname']
            );
        }
    }
}

【讨论】:

    【解决方案3】:
    $arr1 = [
      0 => [
        'id' => 1,
        'name' => 'Peter',
      ],
      1 => [
        'id' => 2,
        'name' => 'John',
      ]
    ];
    
    $arr2 = [
      0 => [
        'id' => 1,
        'surname' => 'Newman',
      ],
      1 => [
        'id' => 2,
        'surname' => 'Cena',
      ]
    ];
    
    // First, I create a new array
    $new_array = array();
    
    // Now I loop throught first array and merge each array by key
    foreach ($arr1 as $key => $value) {
        // If I just check if second array has the key so you can merge both
        // If you are 100% sure that both array has same key, no need to use isset()
        if (isset($arr2[$key])) {
            $new_array[$key] = array_merge($arr1[$key], $arr2[$key]);
        }
    }
    
    var_dump($new_array);
    

    输出是:

    array (size=2)
      0 => 
        array (size=3)
          'id' => int 1
          'name' => string 'Peter' (length=5)
          'surname' => string 'Newman' (length=6)
      1 => 
        array (size=3)
          'id' => int 2
          'name' => string 'John' (length=4)
          'surname' => string 'Cena' (length=4)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多