我的PHP脚本中有一个非常简单的问题。定义了一个函数,该函数采用可变长度参数列表:
function foo() {
// func_get_args() and similar stuff here
}
当我这样打电话时,它运作得很好:
foo("hello", "world");
但是,我在数组中有我的变量,我需要将它们“单独”作为函数的单个参数传递。例如:
$my_args = array("hello", "world");
foo(do_some_stuff($my_args));
是否有任何 do_some_stuff 函数为我分割参数,以便将它们传递给函数?
答案 0 :(得分:17)
使用
或
答案 1 :(得分:6)
你需要call_user_func_array
call_user_func_array('foo', $my_args);
答案 2 :(得分:3)
您正在搜索call_user_func_array()
。
http://it2.php.net/manual/en/function.call-user-func-array.php
用法:
$my_args = array("hello", "world");
call_user_func_array('foo', $my_args);
// Equivalent to:
foo("hello", "world");
答案 3 :(得分:2)
听起来像是在寻找call_user_func_array
。
答案 4 :(得分:0)
http://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list
这不是你想要的吗?
编辑 啊......好吧......这个怎么样: Passing an Array as Arguments, not an Array, in PHP
答案 5 :(得分:0)
如果您可以更改foo()
的代码,则只需在一个地方轻松解决此问题。
function foo()
{
$args = func_get_args();
if(count($args) == 1 && is_array($args[0]))
{
$args = $args[0]
}
// use $args as normal
}
答案 6 :(得分:0)
根本不建议使用此解决方案,只是展示了一种可能性:
使用eval
eval ( "foo('" . implode("', '", $args_array) . "' )" );
答案 7 :(得分:0)
我知道这是一个老问题,但它仍然作为第一个搜索结果出现 - 所以这里有一个更简单的方法;
<?php
function add(... $numbers) {
$result=0;
foreach($numbers as $number){
$result+=intval($number);
}
return $result;
}
echo add(...[1, 2])."\n";
$a = [1, 2];
echo add(...$a);
?>
来源: https://www.php.net/manual/en/functions.arguments.php#example-142