Combining 3 or more arrays in php Assuming I have 5 arrays, all just indexed arrays, and I would like to combine them, this is the best way I can figure, has anyone found a more efficient solution?

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('bob@mail.com', 'fred@mail.com', 'joe@mail.com');
$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] =&gt; Array
        (
            [name] =&gt; Bob
            [email] =&gt; bob@mail.com
            [id] =&gt; 1
        )

    [u2] =&gt; Array
        (
            [name] =&gt; Fred
            [email] =&gt; fred@mail.com
            [id] =&gt; 2
        )

    [u3] =&gt; Array
        (
            [name] =&gt; Joe
            [email] =&gt; joe@mail.com
            [id] =&gt; 3
        )

)


EDIT: After a lot of benchmarking, this is the fastest solution I've come up with

function test_my_new() {
    $args    = func_get_args();
    $keys    = array_shift($args);
    $vkeys   = array_shift($args);
    $results = array();

    foreach($args as $key =&gt; $array) {
        $vkey = array_shift($vkeys);

        foreach($array as $akey =&gt; $val) {
            $result[ $keys[$akey] ][$vkey] = $val;
        }
    }

    return $result;
}

$keys   = array('u1', 'u2', 'u3');
$names  = array('Bob', 'Fred', 'Joe');
$emails = array('bob@mail.com', 'fred@mail.com', 'joe@mail.com');
$ids    = array(1,2,3);
$vkeys  = array('name', 'email', 'id');

test_my_new($keys, $vkeys, $names, $emails, $ids);
I would suggest the following:

function combine_keys_with_arrays($keys, $arrays) {
    $results = array();

    foreach ($arrays as $subKey =&gt; $arr)
    {
       foreach ($keys as $index =&gt; $key)
       {
           $results[$key][$subKey] = $arr[$index];    
       }
    }

    return $results;
}

$keys    = array('u1', 'u2', 'u3');
$names   = array('Bob', 'Fred', 'Joe');
$emails  = array('bob@mail.com', 'fred@mail.com', 'joe@mail.com');
$ids     = array(1,2,3);

combine_keys_with_arrays($keys, array('name'  =&gt; $names,
                                      'email' =&gt; $emails,
                                      'id'    =&gt; $ids));


The second parameter to the function can be built as you need it.  It avoids array shifting and variable arguments, but I think it should be pretty fast.