如何根据 php 中的值合并数组?

How to merge arrays based on value in php?

我有 2 个数组,我必须合并具有相似值的数组。我尝试了 php 的每个基本函数进行数组合并,但没有得到正确的结果。

我试过下面的东西,但它对我不起作用,因为我在第二个数组中有多个数据。正如您在子数组中看到的那样,我有多个记录,我想将它们保存在基本数组中。

    $base= [
        ['id' => 1],
        ['id' => 2],
        ['id' => 3],
        ['id' => 4],
    ];
    
    $child = [
        ['id' => 1, 'size' => 'SM'],
        ['id' => 1, 'size' => 'LK'],
        ['id' => 2, 'size' => 'XL'],
        ['id' => 4, 'size' => 'LG'],
        ['id' => 3, 'size' => 'MD'],
    ];  
    
    foreach(array_merge($base, $child) as $el){
        $merged[$el['id']] = ($merged[$el['id']] ?? []) + $el;
    }
    
    Output :
    array (
      1 => 
      array (
        'id' => 1,
        'size' => 'SM',
      ),
      2 => 
      array (
        'id' => 2,
        'size' => 'XL',
      ),
      3 => 
      array (
        'id' => 3,
        'size' => 'MD',
      ),
      4 => 
      array (
        'id' => 4,
        'size' => 'LG',
      ),
    )

desired output :

array (
  1 => 
  array (
    'id' => 1,
    1 => array('size' => 'SM'),
    2 => array('size' => 'LK'),
  ),
  2 => 
  array (
    'id' => 2,
    1 => array('size' => 'XL'),
  ),
  3 => 
  array (
    'id' => 3,
    1 => array('size' => 'MD'),
  ),
  4 => 
  array (
    'id' => 4,
    1 => array('size' => 'LG'),
  ),
)

因为您的数组 $child 具有相同的键 ID 值,并且每次您保存数组时,它总是会破坏具有相同键 ID 的旧数组。

这里是工作代码:

<?php

$base= [
    ['id' => 1],
    ['id' => 2],
    ['id' => 3],
    ['id' => 4],
];

$child = [
    ['id' => 1, 'size' => 'SM'],
    ['id' => 1, 'size' => 'LK'],
    ['id' => 2, 'size' => 'XL'],
    ['id' => 4, 'size' => 'LG'],
    ['id' => 3, 'size' => 'MD'],
];  
foreach(array_merge($base, $child) as $el){
    if(!isset($el['size'])){ // $base doesn't have 'size' key
        $merged[$el['id']] = []; // fill with empty array 
    }else{
        $merged[$el['id']][] = $el;
    }
    // bellow code is for start array index from 1 instead of 0
    array_unshift($merged[$el['id']],"");
    unset($merged[$el['id']][0]);
}
print_r($merged);