2012-01-28 128 views
12

我的PHP脚本中有一个非常简单的问题。有这需要可变长度参数列表定义的函数: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

[传递数组作为参数,而不是一个阵列,在PHP]的可能重复(http://stackoverflow.com/questions/744145/passing-an-array-as-arguments-not-an-array-in -php) – DanMan 2014-02-18 14:31:03

回答

2

听起来好像你正在寻找call_user_func_array

+0

感谢您的回答,这正是我需要的。但是,我只能接受一个答案。 – 2012-01-28 12:59:36

+0

只要接受那个提供最需要的细节,或最早的一个:) – 2012-01-28 13:05:20

0

如果你可以改变的foo()代码应该很容易在一个地方来解决这个问题。

function foo() 
{ 
    $args = func_get_args(); 
    if(count($args) == 1 && is_array($args[0])) 
    { 
     $args = $args[0] 
    } 
    // use $args as normal 
} 
+0

如果他想传递一个数组(作为第一个参数),这不起作用。 – 2012-01-28 13:00:19

+0

不,如果只有一个参数并且该参数应该是一个数组,它就不起作用。如果有不止一个论点,那么他们都是孤立的。 – Arjan 2012-01-28 13:04:13

+0

是的,我看到了,我看到了... – 2012-01-28 13:05:28

0

不建议在所有的这种解决方案,而只是呈现出可能性:

使用eval

eval ("foo('" . implode("', '", $args_array) . "')");

+1

我知道它只是“显示一种可能性”,但仍然是...这是eval。 ;) – Crozin 2012-01-28 13:12:17