按键合并两个多维数组

时间:2017-09-12 19:57:59

标签: php arrays merge

如何使用具有匹配值的不同键合并两个多维数组?

即。我想要arrayOne中的数据,'Member'=> '45',与arrayTwo中的数据合并,'id'=> '45'。

我无权访问查询,只访问结果数组。

First Array:

arrayOne
array (
  558 => 
  array (
    'id' => '558',
    'Member' => '45',    
    'Status' => 'Active',    
  ),
  559 => 
  array (
    'id' => '559',
    'Member' => '46',
    'Status' => 'Active',    
  ),
)

第二阵列:

arrayTwo
array (
  45 => 
  array (
    'id' => '45',    
    'Name' => 'Johnson',
 ),
  46 => 
  array (
    'id' => '46',
    'Name' => 'Smith',
 ),
)

Desired Array将是这样的:

arrayThree
array (
  45 => 
  array (
    'id' => '45',    
    'Name' => 'Johnson',
    'Member' => '45',
    'Status' => 'Active',  
 ),
  46 => 
  array (
    'id' => '46',
    'Name' => 'Smith',
    'Member' => '46',
    'Status' => 'Active',  
 ),
)

这是我最近尝试过的代码,它会合并记录,但不会通过匹配值合并它们。谢谢你的帮助!

 function my_array_merge($arrayOne, $arrayTwo) {
    $result = arrayThree();
    foreach($arrayOne as $key => $value) {
        $result[$key] = array_merge($value, $arrayTwo[$key]);
    }
    return $result;
}

echo "<pre>";
print_r($result);
echo "</pre>";

1 个答案:

答案 0 :(得分:0)

您可以使用array_map

$array1 = array_combine(array_column($array1, 'Member'), $array1);
$result = array_map(function ($item2) use ($array1) {
    $item1 = isset($array1[$item2['id']]) ? $array1[$item2['id']] : null; 

    if ($item2) {
        $item2['Member'] = $item1['Member'];
        $item2['Status'] = $item1['Status'];
    }

    return $item2;
}, $array2);

这是working demo