如何在php中优雅地合并两个数组,将值存储在新的键中


how to elegantly merge two arrays in php, storing values in new keys

我至少有两个数组(实际上是四个以上):

$first_names = array(
  '0' => 'Jon'
  '1' => 'David'
  );
$last_names = array(
  '0' => 'Schumacher'
  '1' => 'Johnson'
  );

并且需要生产:

$full_names = array(
  '0' => array('first' => 'Jon', 'last' => 'Schumacher')
  '1' => array('first' => 'David', 'last' => 'Johnson')
);

不需要保留原始密钥(但当然,更愿意。需要为超过4个阵列这样做。

我很难找到"最佳"解决方案(可能会从每个解决方案中弹出,但这对我来说可能会产生错误)。

您应该尝试array_map:

$first_names = array(
    '0' => 'Jon'
    '1' => 'David'
);
$last_names = array(
    '0' => 'Schumacher'
    '1' => 'Johnson'
);
$full_names = array_map(function($first, $last) {
    return compact('first', 'last');
}, $first_names, $last_names);

在关联数组中传递给merge函数,在该函数中,每个键都对应于该数组的值将在每个结果项中映射到的值。

$allArrays = array(
    "first" => $first_names,
    "last" => $last_names
);
function merge($allArrays){
    $result = array();
    foreach($allArrays as $key=>$array){
         addToResult($result, $key, $array);
    }
    return $result;
}
function addToResult(&$result, $arrayKey, $array){
    foreach($array as $key=>$value){
        if(!isset($result[$key])){
            $result[$key] = array();
        }
        $result[$key][$arrayKey] = $value;
    }
}
$full_names = merge($allArrays);

我对此的看法:

$full_names = array();
foreach( $first_names as $index => $f ) {
    $full_names[] = array('first' => $f, 'last' => $last_names[$index]);
}