我有一个自定义函数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);
只是不确定如何正确行事......
答案 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。