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

时间:2014-05-19 07:16:13

标签: php arrays

我有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'
             );

任何人都可以帮我解决这个问题吗?

5 个答案:

答案 0 :(得分:2)

因此请使用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()的参数数组中重新计算所有数组

答案 1 :(得分:1)

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

<?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

答案 2 :(得分:1)

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);

// $结果= array_merge_multiple($数组1,$数组2,$ ARRAY3,.........,$ arrayn);

print_r($result);

答案 3 :(得分:0)

这样的事可能

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;
}

答案 4 :(得分:0)

您可以这样做:

$array1=array('usa'=>123, 'uk' => '1234', 'germany'=> '1235');

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

$result = array_merge_recursive($array1, $array3);

$ result是合并后的结果