我想使用数组来调用函数。
首先,我通过邮寄获得表格,所以我有类似的东西。
$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);
答案 0 :(得分:1)
您可以将其作为数组传递给函数,并在函数内部执行$variables = array($var1, $var2, $var3, $varN);
。
您的变量:
function addToTable($array = [])
{
foreach ($array as $key => $value) {
// Do stuff here
}
}
功能:
addToTable($variables);
你可以这样调用这个函数:
^\s*
subblock
[\s\S]+?
^\s*\};$
答案 1 :(得分:1)
您可以使用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
答案 2 :(得分:0)
除了上面已经提到的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()
类似 - 虽然更灵活 - 例如,您可以使用typehinting:
function foo(array ...$arguments)
{
//
}
foo([], [], []); // works, each argument is an array
foo(1, 2, 3); // fatal error!
正如release docs Argument Unpacking中所述,执行以下操作:
使用...运算符调用函数时,可以将数组和可遍历对象解压缩到参数列表中。这也称为其他语言的splat运算符,包括Ruby。
如果您已经有一个值数组要应用于具有显式参数列表的函数,那么这非常有用。这可能是最好的方法,因为它是明确的,因此最容易推理。
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函数不需要函数具有显式参数列表。但是,我认为更难以推断出一个没有明确说明其参数的函数,而且验证和使用传递给它的参数更难。
希望这会有所帮助:)