2014-05-19 65 views
2

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

任何人帮助我如何做到这一点?

+0

$ array1到$ arrayn不在数组中吗?他们是个体变量吗? – Eddie

+0

是的,他们都是个体变量... – user1140176

+0

他们是固定在数量还是会有所不同? – Eddie

回答

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

+0

非常感谢... – user1140176

+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()

+0

如果我必须传递n个数组该怎么办。我的意思是如果我不知道有多少个数组? – user1140176

+0

然后创建数组,它将包含您的数组。因为如果你有一些变量,你不知道它们是什么(他们的名字是什么,他们的计数是多少) - 那么你怎样才能得到结果呢?你的输入条件应该定义,你不能用“未知变量”来执行 –

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

你可以做是这样的:

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

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

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

$结果是合并后的结果

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

//$result=array_merge_multiple($array1,$array2,$array3,.........,$arrayn);

print_r($result); 
+0

如果我有n个数组要合并...... – user1140176

+0

这会产生你的期望结果,你可以通过“N”数组。 –