ok, assuming I have 5 arrays, all just indexed arrays, and I would like to combine them, this is the best way I can figure, is there a better way to handle this?
function mymap_arrays(){ $args=func_get_args(); $key=array_shift($args); return array_combine($key,$args); } $keys=array('u1','u2','u3'); $names=array('Bob','Fred','Joe'); $emails=array('[email protected]','[email protected]','[email protected]'); $ids=array(1,2,3); $u_keys=array_fill(0,count($names),array('name','email','id')); $users=array_combine($keys,array_map('mymap_arrays',$u_keys,$names,$emails,$ids)); this returns:
Array ( [u1] => Array ( [name] => Bob [email] => [email protected] [id] => 1 ) [u2] => Array ( [name] => Fred [email] => [email protected] [id] => 2 ) [u3] => Array ( [name] => Joe [email] => [email protected] [id] => 3 ) ) EDIT: After lots of benchmarking I wend with a version of Glass Robots answer to handle a variable number of arrays, it's slower than his obviously, but faster than my original:
function test_my_new(){ $args=func_get_args(); $keys=array_shift($args); $vkeys=array_shift($args); $results=array(); foreach($args as $key=>$array){ $vkey=array_shift($vkeys); foreach($array as $akey=>$val){ $result[$keys[$akey]][$vkey]=$val; } } return $result; } $keys=array('u1','u2','u3'); $names=array('Bob','Fred','Joe'); $emails=array('[email protected]','[email protected]','[email protected]'); $ids=array(1,2,3); $vkeys=array('name','email','id'); test_my_new($keys,$vkeys,$names,$emails,$ids);