Reputation: 115
I have n
number of arrays
$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');
I need a php code so that I can have result as follows:
$final_array=array(
'usa'=>'123,123a,123,...,123b',
'uk'=>'1234,1234,1234a,...,1234',
'germany'=>'1235,1235aa, 123a5,...,1235'
);
Can anyone help me how to do this?
Upvotes: 2
Views: 218
Reputation: 16297
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);
Upvotes: 1
Reputation: 4414
You can create a function, where you can pass your arrays one by one.
<?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);
?>
Here is DEMO
Upvotes: 1
Reputation: 680
You can do something like this:
$array1=array('usa'=>123, 'uk' => '1234', 'germany'=> '1235');
$array3=array('usa'=>1231, 'uk' => '1234a', 'germany'=> '123a5');
$result = array_merge_recursive($array1, $array3);
$result being the merged results
Upvotes: 0
Reputation: 9689
Something like this perhaps
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;
}
Upvotes: 0
Reputation: 37365
So use call_user_func_array()
to do this:
$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]));
That is: array_merge_recursive()
will gather all the items with corresponding key. Later array_map()
will use join()
to transform items to delimiter-separated strings.
Note, that, since all your arrays are separated variables, you'll have to re-count all of them in parameters array for call_user_func_array()
Upvotes: 2