PHP-基于值的Merge 2多维数组

PHP-基于值的Merge 2多维数组,php,arrays,merge,Php,Arrays,Merge,目前,我有两个多维数组,我希望将它们组合成一个巨大的数组,其中数组1中的值名称与数组2中的值名称匹配。 阵列的外观如下所示 Array1 ( [0] => Array ( [id] => 1 [name] => test1 [desc] => test_desc [quantity] => 3 ) [1] => Ar

目前,我有两个多维数组,我希望将它们组合成一个巨大的数组,其中数组1中的值名称与数组2中的值名称匹配。 阵列的外观如下所示

Array1
(
    [0] => Array
        (
            [id] => 1
            [name] => test1
            [desc] => test_desc
            [quantity] => 3
        )

    [1] => Array
        (
            [id] => 2
            [name] => test2
            [desc] => test_desc
            [quantity] => 33
        )

)


Array2
(
    [0] => Array
        (
            [holder] => 'John'
            [name] => test1
            [desc] => test_desc
            [location] => ATL
        )

    [1] => Array
        (
            [holder] => 'Jackie'
            [name] => test3
            [desc] => test_desc
            [location] => SF
        )

)
我希望合并array1中的“name”列与array2中的“name”列相匹配的数组,并将数组1和2中的列合并到最终数组中。这应该看起来像

FinalArray
(
    [0] => Array
        (
            [id] => 1
            [holder] => 'John'
            [name] => test1
            [desc] => test_desc
            [location] => ATL
            [quantity] => 3
        )

    [1] => Array
        (
            [holder] => 'Jackie'
            [name] => test3
            [desc] => test_desc
            [location] => SF
        )

    [2] => Array
        (
            [id] => 2
            [name] => test2
            [desc] => test_desc
            [quantity] => 33
        )

)
其中,“test1”将两个数组中的不同列合并到“FinalArray”中的新数组中。我试着研究一些关于数组合并和数组合并递归的想法,但我不完全确定我是否走在了正确的方向上。提前谢谢。

像这样试试

$array1=[['id' => 1,'name' => 'test1','desc' => 'test_desc','quantity' => 3],
    ['id' => 2,'name' => 'test2','desc' => 'test_desc','quantity' => 33]];
$array2=[['holder' => 'John','name' => 'test1','desc' => 'test_desc','location' => 'ATL'],
    ['holder' => 'Jackie','name' => 'test3','desc' => 'test_desc','location' => 'SF']];
$final=[];
foreach ($array1 as $key1=>$data1){
    foreach ($array2 as $key2=>$data2){
        if($data1['name']==$data2['name']){
            $final[]=$data1+$data2;
            unset($array1[$key1]);
            unset($array2[$key2]);
        }
    }
}
if(!empty($array1)){
    foreach ($array1 as $value){
        $final[]=$value;
    }
}
if(!empty($array2)){
    foreach ($array2 as $value){
        $final[]=$value;
    }
}
它将给出如下输出:

像这样试试

$array1=[['id' => 1,'name' => 'test1','desc' => 'test_desc','quantity' => 3],
    ['id' => 2,'name' => 'test2','desc' => 'test_desc','quantity' => 33]];
$array2=[['holder' => 'John','name' => 'test1','desc' => 'test_desc','location' => 'ATL'],
    ['holder' => 'Jackie','name' => 'test3','desc' => 'test_desc','location' => 'SF']];
$final=[];
foreach ($array1 as $key1=>$data1){
    foreach ($array2 as $key2=>$data2){
        if($data1['name']==$data2['name']){
            $final[]=$data1+$data2;
            unset($array1[$key1]);
            unset($array2[$key2]);
        }
    }
}
if(!empty($array1)){
    foreach ($array1 as $value){
        $final[]=$value;
    }
}
if(!empty($array2)){
    foreach ($array2 as $value){
        $final[]=$value;
    }
}
它将给出如下输出:

再来一个解决方案

function merge_by_name(array $arr1, array $arr2) {
    $result = [];

    foreach ($arr1 as $value) {

        $key = array_search($value['name'], array_column($arr2, 'name'));

        if($key !== false) {
            $result[] = array_merge($value, $arr2[$key]);
            unset($arr2[$key]);
        } else {
            $result[] = $value;
        }
    }
    $result = array_merge($result, $arr2);

    return $result;
}

试验

结果

array (
  0 => 
  array (
    'id' => 1,
    'name' => 'test1',
    'desc' => 'test_desc',
    'quantity' => 3,
    'holder' => 'John',
    'location' => 'ATL',
  ),
  1 => 
  array (
    'id' => 2,
    'name' => 'test2',
    'desc' => 'test_desc',
    'quantity' => 33,
  ),
  2 => 
  array (
    'holder' => 'Jackie',
    'name' => 'test3',
    'desc' => 'test_desc',
    'location' => 'SF',
  ),
)
还有一个解决方案

function merge_by_name(array $arr1, array $arr2) {
    $result = [];

    foreach ($arr1 as $value) {

        $key = array_search($value['name'], array_column($arr2, 'name'));

        if($key !== false) {
            $result[] = array_merge($value, $arr2[$key]);
            unset($arr2[$key]);
        } else {
            $result[] = $value;
        }
    }
    $result = array_merge($result, $arr2);

    return $result;
}

试验

结果

array (
  0 => 
  array (
    'id' => 1,
    'name' => 'test1',
    'desc' => 'test_desc',
    'quantity' => 3,
    'holder' => 'John',
    'location' => 'ATL',
  ),
  1 => 
  array (
    'id' => 2,
    'name' => 'test2',
    'desc' => 'test_desc',
    'quantity' => 33,
  ),
  2 => 
  array (
    'holder' => 'Jackie',
    'name' => 'test3',
    'desc' => 'test_desc',
    'location' => 'SF',
  ),
)

让我们看看你到目前为止都做了些什么