Page 1 of 1
merging arrays
Posted: Thu Jan 20, 2011 6:33 am
by ibolui
hi guys, need help with some php codes.
Code: Select all
$aa = array('name'=>array('tom'=>'tt', 'dick'=>'dd'));
$bb = array('age'=>array('tom'=>'11','dick'=>'22'));
how can I have the array result below..
Code: Select all
array(
// tom
array('name'=>'tt', 'age'=>'11'),
// dick
array('name'=>'dd', 'age'=>'22'),
)
thanks!!
Re: merging arrays
Posted: Thu Jan 20, 2011 7:13 am
by Peter Kelly
Code: Select all
$i = "0";
foreach ($aa['name'] as $key => $value){
$name = $value;
$age = $bb['age'][$key];
$array[$i][name] = $name;
$array[$i][age] = $age;
$i++;
}
Try that?
Re: merging arrays
Posted: Thu Jan 20, 2011 7:51 am
by ibolui
nope..i wouldnt know what are in the arrays beforehand..
Re: merging arrays
Posted: Thu Jan 20, 2011 8:34 am
by VladSun
Code: Select all
<?php
$aa = array('name'=>array('tom'=>'tt', 'dick'=>'dd'));
$bb = array('age'=>array('tom'=>'11','dick'=>'22'));
$expectedResult = array
(
'tom' => array('name'=>'tt', 'age'=>'11'),
'dick' => array('name'=>'dd', 'age'=>'22'),
);
/*******************************************/
// Weirdan fix
$result = array_merge($aa, $bb);
$names = array_keys(end($result));
$fields = array_keys($result);
array_unshift($result, null);
$result = call_user_func_array('array_map', $result);
array_walk
(
$result,
function (&$value, $key, $fields)
{
$value = array_combine($fields, $value);
},
$fields
);
$result = array_combine($names, $result);
/*******************************************/
assert('print_r($expectedResult, true) === print_r($result, true);');
var_dump($result);
Re: merging arrays
Posted: Thu Jan 20, 2011 8:39 am
by Weirdan
Code: Select all
$aa = array('name'=>array('tom'=>'tt', 'dick'=>'dd'));
$bb = array('age'=>array('tom'=>'11','dick'=>'22'));
$ret = array();
foreach (array_merge($aa, $bb) as $key => $data) {
foreach ($data as $item => $value) {
$ret[$item][$key] = $value;
}
}
$ret = array_values($ret);
var_dump($ret);
Re: merging arrays
Posted: Thu Jan 20, 2011 8:43 am
by VladSun
I am not sure whether the OP meant:
Code: Select all
array(
// tom
array('name'=>'tt', 'age'=>'11'),
// dick
array('name'=>'dd', 'age'=>'22'),
)
=>
Code: Select all
array(
'tom' =>
array('name'=>'tt', 'age'=>'11'),
'dick' =>
array('name'=>'dd', 'age'=>'22'),
)
Though it's easy to fix - just comment out
$ret = array_values($ret);
Nice solution Weirdan

It gives me some fixes to my code

Obviously, I "overcoded" the problem by trying to use the array_* functions.
Re: merging arrays
Posted: Thu Jan 20, 2011 9:44 am
by ibolui
Code: Select all
$aa = array('name'=>array('tom'=>'tt', 'dick'=>'dd'));
$bb = array('age'=>array('tom'=>'11','dick'=>'22'));
$ret = array();
foreach (array_merge($aa, $bb) as $key => $data) {
foreach ($data as $item => $value) {
$ret[$item][$key] = $value;
}
}
$ret = array_values($ret);
var_dump($ret);
thank you!!