Сочетание 3 или более массивов в PHP


Если у меня есть 5 массивов, все просто индексированные массивы, и я хочу объединить их, это лучший способ я могу понять, кто-то нашел более эффективное решение?

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)
          );

Это возвращает:

Array
(
    [u1] => Array
        (
            [name] => Bob
            [email] => bob@mail.com
            [id] => 1
        )

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

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

)

Редактировать: после долгих бенчмаркинга, это самое быстрое решение, которое я придумал

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('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);


5052
6
задан 1 июля 2011 в 10:07 Источник Поделиться
Комментарии
1 ответ

Я бы предложил следующее:

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

foreach ($arrays as $subKey => $arr)
{
foreach ($keys as $index => $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' => $names,
'email' => $emails,
'id' => $ids));

Второй параметр функции может быть построен как вам это нужно. Это позволяет избежать смещения массива и переменных аргументов, но я думаю, что это должно быть довольно быстро.

2
ответ дан 9 декабря 2011 в 09:12 Источник Поделиться