我有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 :(得分: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是合并后的结果