【问题标题】:How to pass dynamically created arguments (variable variables arrays) to function in php?如何将动态创建的参数(可变变量数组)传递给 php 函数?
【发布时间】:2016-04-01 17:13:54
【问题描述】:

我有一个自定义函数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);

只是不知道怎么做才对……

【问题讨论】:

  • 什么是array_sequence_merge(),它有什么作用?
  • 它只接受一维数组作为参数,并且将单个多维数组作为参数传递是行不通的。这是link to function

标签: php arrays function variables parameter-passing


【解决方案1】:

像这样使用call_user_func_array

call_user_func_array('array_sequence_merge', $arguments);

$arguments 是你的参数数组。

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

编辑 实现类似

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

您必须像这样更改代码:

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

// $result contains the return value of the array_sequence_merge function call
$result = call_user_func_array('array_sequence_merge', $arguments);

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

【讨论】:

  • $arguments 是由参数变量名称组成的数组,而不是参数本身,它还能工作吗?
  • 不回答实际问题,即如何将函数与一堆变量变量一起使用,而不是数组
  • 我刚试过,它只传递 $temporary_array (或你的答案中的 $arguments )元素的字符串值,而不是所需的数组变量。
  • @Acidon 只需将您的参数添加到数组中,而不是逗号分隔的字符串(然后将其传递到此答案中的示例中)
  • 但这正是 call_user_func_array 所做的(不要与“call_user_func”混淆!!)。它将单个数组作为第二个参数,并将该数组的每个元素作为单个参数传递。所以你要做的就是创建一个包含所有参数的二维数组并将其传递给 call_user_func_array,它会将多个一维数组作为单独的参数传递给你的函数。还要检查这个函数的文档(见我答案第一行的链接)
猜你喜欢
  • 2010-11-28
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
相关资源
最近更新 更多