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
:twisted:

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