阵列结合三个或更多的阵列,PHP [英] array combine three or more arrays with php

查看:127
本文介绍了阵列结合三个或更多的阵列,PHP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧,假设我有5阵列,都只是索引的数组,我想将它们结合起来,这是我可以计算最好的方式,有没有更好的方式来处理呢?

 函数mymap_arrays(){
    的$ args = func_get_args();
    $键= array_shift($参数);
    返回array_combine($键,$参数);
}
$键=阵列('U1','U2','U3');
$名称=阵列('鲍勃','弗雷德','乔');
$电子邮件=阵列('bob@mail.com','fred@mail.com','joe@mail.com');
$ IDS =阵列(1,2,3);
$ u_keys = array_fill(0,计数($名),阵列(名称,电子邮件,ID));
$用户= array_combine($键,array_map('mymap_arrays',$ u_keys,$名称,$电子邮件,$ IDS));

这将返回:

 阵列

    [U1] =>排列
        (
            [名] =>短发
            [邮件] => bob@mail.com
            [ID] => 1
        )    [U2] =>排列
        (
            [名] =>弗雷德
            [邮件] => fred@mail.com
            [ID] => 2
        )    [U3] =>排列
        (
            [名] =>乔
            [邮件] => joe@mail.com
            [ID] => 3
        ))

编辑:经过大量的标杆我用版本玻璃机器人的答案来处理可变数量阵列蜿蜒的,这是比他明显要慢,但比我原来的速度:

 函数test_my_new(){
    的$ args = func_get_args();
    $键= array_shift($参数);
    $ vkeys = array_shift($参数);
    $结果=阵列();
    的foreach($ ARGS为$关键=> $阵列){
        $ v键= array_shift($ vkeys);
        的foreach($数组作为$ AKEY => $ VAL){
            $结果[$键[$ AKEY] [$ v键] = $ VAL;
        }
    }
    返回$结果;
}
$键=阵列('U1','U2','U3');
$名称=阵列('鲍勃','弗雷德','乔');
$电子邮件=阵列('bob@mail.com','fred@mail.com','joe@mail.com');
$ IDS =阵列(1,2,3);
$ vkeys =阵列(名称,电子邮件,ID);
test_my_new($键,$ vkeys,$名称,$电子邮件,$ IDS);


解决方案

亲自为可读性我会做这种方式:

  $键=阵列('U1','U2','U3');
$名称=阵列('鲍勃','弗雷德','乔');
$电子邮件=阵列('bob@mail.com','fred@mail.com','joe@mail.com');
$ IDS =阵列(1,2,3);
$结果=阵列();的foreach($键作为的$ id => $键){
    $结果[$关键] =阵列(
        '名'=> $名称[$ ID]
        电子邮件=> $电子邮件[$ ID]
        'ID'=> $ IDS [$ ID]
    );
}

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('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] => 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
        )

)

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

解决方案

Personally for readability I would do it this way:

$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);
$result = array();

foreach ($keys as $id => $key) {
    $result[$key] = array(
        'name'  => $names[$id],
        'email' => $emails[$id],
        'id'    => $ids[$id],
    );
}

这篇关于阵列结合三个或更多的阵列,PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆