我想用一个数组来调用一个函数。
首先,我通过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函数不要求函数有显式的参数列表。然而,我认为对于一个没有显式声明其参数的函数进行推理会更加困难,并且更难验证和使用传递给它的参数。
希望这对你有帮助