关于php:array_merge中可以有多少个数组?

How many arrays can be in array_merge?

所以我理解array_merge()合并了多个数组。 我只是对幕后的参数感到困惑。 那么它真正可以接收多少个参数?

我希望答案是"技术上不受限制的"(即使我知道如果您需要这样做的话,也会出错)。

那么,遵循该想法,该功能如何正常工作? 它不提前知道参数。 不一定要这样设计功能才能工作:

1
function array_merge($array, $array1=[], $array2=[], and so on...)

我们如何才能继续添加参数?

注意:我上过一堂课,使我们对功能的工作原理提出了挑战,这就是为什么我对功能的工作如此具体。


可以将其视为将数组发送到函数的相同方式;不需要事先知道数组大小的大小,而只是在调用函数时知道。

然后,假设PHP解释器在后台执行相同的操作;可以将定义为"我可以接受尽可能多的参数"的函数重写为将每个参数填充到数组中,然后将该数组提供给函数(这是一种简化,但从概念上讲类似的事情发生了),然后该函数可以一次读取一项。

实际上,您可以完全通过以下方式在PHP函数中完成此操作:

1
2
3
4
5
6
<?php
function foo() {
    var_dump(func_get_args());
}

foo(1, 2, 3, 4, 5, 6);

这没有什么神奇的-解释器或编译器知道可以使用多个参数来调用函数(通过其签名或在PHP的情况下,无论定义如何)。

Python会通过定义一个参数以"匹配所有索引的参数"(即未由键命名)来实现相同的目的:

1
2
3
4
5
def a(*args):
    print(args)

a(1, 2, 3, 4, 5)
=> (1, 2, 3, 4, 5)

PHP 5.6引入了可以使用的相同的显式定义,即可变参数函数。它们在其签名中使用...来告诉解释器,它应该使用定义的参数之后的所有参数并将其放入数组中。


您已阅读array_merge()的文档吗?

它接受任意数量的数组作为参数(但至少一个):

Description

1
array array_merge ( array $array1 [, array $... ] )

Merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array.

它创建第一个数组的副本,然后一个一个地处理其他数组,将它们的值附加到部分结果中,直到处理所有输入数组为止。

用户定义的函数也可以接收任意数量的参数。