将两个或多个简单数组转换为多维数组?

时间:2015-05-19 19:01:21

标签: php arrays multidimensional-array foreach

鉴于我有这些数组:

$array1

Array
(
    [0] => Title1
    [1] => Title2
    [2] => Title3
    [3] => Title4
...

$array2

Array
(
    [0] => A
    [1] => B
    [2] => C
    [3] => D
...

$array3

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
...

我想将所有上层数组转换为一个多维数组,如下所示:

Array
(
    [0] => Array
        (
            [0] => Title1
            [1] => A
            [2] => 1
        )

    [1] => Array
        (
            [0] => Title2
            [1] => B
            [2] => 2
        )

    [2] => Array
        (
            [0] => Title3
            [1] => C
            [2] => 3
        )
...

我有这样的代码可以做我想要的但是过度且低效的代码:

$result1 = array();
foreach($array1 as $key => $value) {
    $tmp = array($value);
    if (isset($array2[$key])) {
        $tmp[] = $array2[$key];
    }
    $result1[] = $tmp;
}

$result2 = array();
$i=0;
foreach($result1 as $value){
  $result2[$i] = $value;
  $result2[$i][] = $array3[$i];
  $i++;
}

print_r($result2);

在效率方面,我该如何改进我的代码?这可以在一个“ foreach ”中完成吗?如果我有十个甚至更简单的数组怎么样?如果是这种情况,使用我的代码我将需要复制第二个foreach并更改前两个数组之后的每个其他数组的变量。

2 个答案:

答案 0 :(得分:10)

这应该适合你:

只需使用array_map()一次循环遍历所有数组,例如

$result = array_map(function($v1, $v2, $v3){
    return [$v1, $v2, $v3];
}, $array1, $array2, $array3);

或者你可以使用call_user_func_array(),所以如果扩展你只需要将变量添加到数组中而不必在匿名函数中添加参数:

$result = call_user_func_array("array_map", [NULL, $array1, $array2, $array3]);

答案 1 :(得分:4)

array_map()是要走的路,但它更容易:

$result = array_map(null, $array1, $array2, $array3);