2012-01-28 117 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