如何将动态创建的参数(变量变量数组)传递给php中的函数?

时间:2015-12-27 18:41:59

标签: php arrays function variables parameter-passing

我有一个自定义函数array_sequence_merge()。在func_get_args()的帮助下,只要它们都是ARRAYS,就可以将任意数量的参数传递给函数。

问题是,需要传递给函数的数组是使用未知大小的WHILE循环动态创建的:

while($n < count($site)) {
    $siten = $site[$n];
    $sql = "SELECT url FROM `".$$siten->domain."`";
    $result = $con->query($sql);
    while($row = $result->fetch_array()){
        ${$siten."_url_list"} = $row['url'];
    }
}

因此。例如,如果$site数组中有3个元素,则生成的3个数组将为:

$element1_url_list
$element2_url_list
$element3_url_list

现在必须将它们传递给array_sequence_merge()函数以获取:

array_sequence_merge($element1_url_list, $element2_url_list, $element3_url_list);

每次$site数组中的元素数量不同,动态创建的XXXXX_url_list数组的数量也不同。

问题:如何将这些数组变量传递给函数?

我接近它的方法是在WHILE循环中创建后立即将动态创建的数组变量名存储在临时数组中。但是我不知道下一步该怎么做...如果我能做某种“参数列表连接”,比如:

$arguments = $temporary_array[0];
while($n < count($temporary_array)) {
    $arguments .= ",".$temporary_array[$n];
}

array_sequence_merge($arguments);

只是不确定如何正确行事......

1 个答案:

答案 0 :(得分:2)

像这样使用call_user_func_array

[String, Any]

使用$ arguments作为参数数组。

然后,数组的每个元素都作为“array_sequence_merge”的单独参数处理。

修改 实现类似

的目标
call_user_func_array('array_sequence_merge', $arguments);

你必须改变这样的代码:

array_sequence_merge($element1_url_list, $element2_url_list, $element3_url_list, ...);

所以基本上不是创建$ elementN_url_list变量而是将它们写入数组$ arguments并将其作为第二个参数传递给call_user_func_array。