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

4
考虑到我有以下这些数组: $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个回答

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

哇,@Rizier123。 总是提供好的答案。 完美地运行。 谢谢!! - Ava Barbilla
1
你也一样 :) @Rizier123 - Ava Barbilla

4

array_map() 是最好的选择,但使用起来要简单得多:

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

我以为今天你只会发布evil()的答案?! :D - Rizier123
1
抱歉;-) eval('$result = array_map(null, $array1, $array2, $array3);'); - AbraCadaver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接