按索引/键合并数组,保留所有值


Merge array by index/key keeping all values

我有n数量的数组

$array1=array('usa'=>123, 'uk' => '1234', 'germany'=> '1235');
$array2=array('usa'=>123a, 'uk' => '1234', 'germany'=> '1235aa');
$array3=array('usa'=>123, 'uk' => '1234a', 'germany'=> '123a5');
$arrayn=array('usa'=>123b, 'uk' => '1234', 'germany'=> '1235');

我需要一个php代码,这样我就可以得到如下结果:

$final_array=array(
                 'usa'=>'123,123a,123,...,123b',
                 'uk'=>'1234,1234,1234a,...,1234', 
                 'germany'=>'1235,1235aa, 123a5,...,1235'
             );

有人能帮我怎么做吗?

因此使用call_user_func_array()来执行此操作:

$array1=array('usa'=>'123', 'uk' => '1234', 'germany'=> '1235');
$array2=array('usa'=>'123a', 'uk' => '1234', 'germany'=> '1235aa');
$array3=array('usa'=>'123', 'uk' => '1234a', 'germany'=> '123a5');
$result = array_map(function($x)
{
   return join(',', $x);
}, call_user_func_array('array_merge_recursive', [$array1, $array2, $array3]));

即:array_merge_recursive()将收集所有具有相应密钥的项目。稍后array_map()将使用join()将项目转换为分隔符分隔的字符串。

注意,由于所有数组都是分离的变量,因此必须在参数数组中重新计算call_user_func_array() 的所有数组

您可以创建一个函数,在其中可以逐个传递数组。

<?php
$array1=array('usa'=>'123', 'uk' => '1234', 'germany'=> '1235');
$array2=array('usa'=>'123a', 'uk' => '1234', 'germany'=> '1235aa');
$array3=array('usa'=>'123', 'uk' => '1234a', 'germany'=> '123a5');
function add_arr($arr, &$final)
{
    foreach($arr as $key=>$val){
        if(isset($final[$key])){
            $final[$key].=",".$val;
        }else{
           $final[$key]=$val;
        }
    }
}
$arr_final=array();
add_arr($array1,$arr_final);
add_arr($array2,$arr_final);
add_arr($array3,$arr_final);
print_r($arr_final);
?>

这是DEMO

function array_merge_multiple() {
    $result = array();
    $numargs = func_num_args();
    $arg_list = func_get_args();
    for ($i = 0; $i < $numargs; $i++) {
        $array = $arg_list[$i];
        $keys = array_keys($array);
        foreach ($keys as $v) {
            if (isset($result[$v])) {
                $result[$v].="," . $array[$v];
            } else {
                $result[$v] = $array[$v];
            }
        }
    }
    return $result;
}
$result=array_merge_multiple($array1,$array2,$array3,$arrayn);

//$result=array_multiple($array1,$array2,$array3,……,$arrayn(;

print_r($result);

可能是

function black_magic($arrays = array()) {
$return = array();
foreach ($arrays as $array) {
    if (!$return) {
    $return = $array;
    continue;
    }
    foreach ($array as $key => $value) {
    if (isset($return[$key])) {
        $return[$key] .= ($return[$key]) ? ",$value" : $value;
    }
    else {
        $return[$key] = $value;
    }
    unset($key, $value);
    }
    unset($array);
}
return $return;
}

您可以这样做:

$array1=array('usa'=>123, 'uk' => '1234', 'germany'=> '1235');
$array3=array('usa'=>1231, 'uk' => '1234a', 'germany'=> '123a5');
$result = array_merge_recursive($array1, $array3);

$result是合并结果