为什么带有null作为回调的array_map()会创建一个“数组数组”?

时间:2015-07-23 16:00:14

标签: php arrays specifications array-map

今天我在PHP中了解了array_map()的一个特例,在文档中作为旁注提到:

  

示例#4创建数组数组

<?php
$a = array(1, 2, 3, 4, 5);
$b = array("one", "two", "three", "four", "five");
$c = array("uno", "dos", "tres", "cuatro", "cinco");

$d = array_map(null, $a, $b, $c);
print_r($d);
?>
     

以上示例将输出:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => one
            [2] => uno
        )

    [1] => Array
        (
            [0] => 2
            [1] => two
            [2] => dos
        )

    [2] => Array
        (
            [0] => 3
            [1] => three
            [2] => tres
        )

    [3] => Array
        (
            [0] => 4
            [1] => four
            [2] => cuatro
        )

    [4] => Array
        (
            [0] => 5
            [1] => five
            [2] => cinco
        )

)
     

如果数组参数包含字符串键,则返回数组   当且仅当传递了一个数组时,才会包含字符串键。   如果传递了多个参数,则返回的数组始终具有   整数键。

(try it out)

但就是这样。没有更多的解释。我明白,这跟

一样
$d = array_map(function() { return func_get_args(); }, $a, $b, $c);

但为什么有人想要或期望这是默认行为?有没有技术上的原因,为什么它的工作原理,如实施的副作用?或者这只是一个随机的“让这个功能再做一件事”的决定(看着你,array_multisort())?

1 个答案:

答案 0 :(得分:3)

这似乎是_array_map_中的一个特例,但它只在该示例中记录。 NULL 通常不允许作为回调(如果您尝试将其与call_user_func()一起使用,则报告错误),但在_array_map()_中允许使用它。它将NULL视为应该只创建一个参数数组。

这很有用,因为array作为回调也无效,因为它是语言构造,而不是函数。所以你不能写:

$d = array_map('array', $a, $b, $c);