使用变量名称的数组调用函数


Using an array of vars name to call a function

我想用一个数组来调用一个函数。

首先,我通过post获得一个表单,所以我有这样的东西。

$var1="red";
$var2="blue";
$var3="Mary";
$varN="Ted";
我创建了一个像这样的数组:
$variables=array("$var1", "$var2", "$var3", "$varN");

我想用这个数组调用另一个函数,实际上它是一个MySQL查询。所以我想用数组

来得到这个结果
addToTable($var1, $var2, $var3, varN);

这可能吗?

我这样做的原因是因为我将在表中引入多个条目,这是一个可变数量的条目,数组var名称将会改变。对于下一轮,我将在查询中引入类似于这样的内容:

addToTable($var1_2, $var2_2, $var3_2, varN_2);

您可以将其作为数组传递给函数并在函数内执行foreach

你变量:

$variables = array($var1, $var2, $var3, $varN);
函数:

function addToTable($array = [])
{
   foreach ($array as $key => $value) {
      // Do stuff here
   }
}

然后像这样调用函数:

addToTable($variables);

您可以使用call_user_func_array()传递一个参数数组给函数。

function addToTable($a, $b, $c, $d)
{
    return "{$a}-{$b}-{$c}-{$d}";
}
$var1 = 'red';
$var2 = 'blue';
$var3 = 'Mary';
$varN = 'Ted';
$arguments = array($var1, $var2, $var3, $varN);
$x = call_user_func_array('addToTable', $arguments);
echo $x; // red-blue-Mary-Ted

除了上面已经提到的call_user_func_array()之外,从5.6开始,您还可以通过以下方式执行类似的操作:

可变函数

可以将任意数量的值传递给函数,函数将这些值收集到一个可迭代的参数中:

function foo(...$arguments)
{
    foreach ($arguments as $arg) {
        echo $arg . PHP_EOL;
    }
}
foo(1, 2, 3);

收益率:

1
2
3

这有点类似于传入数组或call_user_func_array()—尽管更加灵活—例如,您可以使用类型提示:

function foo(array ...$arguments)
{
    //
}
foo([], [], []); // works, each argument is an array
foo(1, 2, 3);    // fatal error!

参数解包

如发行文档中所述,参数解包执行以下操作:

数组和可遍历对象在调用函数时可以通过使用…操作符。这在其他语言(包括Ruby)中也称为splat操作符。

如果您已经有一个值数组,并且希望将其应用于具有显式参数列表的函数,则此操作非常有用。这可能是最好的方法,因为它是明确的,因此最容易推理。

function bar($a, $b, $c)
{
    echo $a . PHP_EOL;
    echo $b . PHP_EOL;
    echo $c . PHP_EOL;
}
$params = [1, 2, 3];
bar(...$params);

收益率:

1
2
3

否则,如果您使用<= 5.5,您可以使用func_get_args():

近似可变方法
function baz()
{
    foreach (func_get_args() as $arg) {
        echo $arg . PHP_EOL;
    }
}
baz(1, 2, 3, 4);

PHP函数不要求函数有显式的参数列表。然而,我认为对于一个没有显式声明其参数的函数进行推理会更加困难,并且更难验证和使用传递给它的参数。

希望这对你有帮助