2015-05-15 51 views
0

我有一個數組,我需要將數組的每個元素作爲參數傳遞給一個函數。如何使用動態數量的參數調用函數?

說:

$var = array("var2","var3","var4"); 
//Pass each element as a new parameter to a function 
call_to_function ($var2, $var3, $var4); 

//However, if the number of array element change it can be 
$var = array("var2","var3"); 
call_to_function ($var2,$var3); 

的問題這裏,如何建立的參數的動態號碼並撥打電話的功能。

使用: PHP功能mysqli_stmt::bind_param,需要多個參數。我需要從arrray派生參數。

有沒有辦法做到這一點?

+1

所以你要調用'mysqli_stmt_bind_param()'這個數組? – Rizier123

+0

也許'call_user_func_array'(http://php.net/call_user_func_array)帶有'func_num_args'和'func_get_args'? –

+0

爲數組的每個值指定一個鍵。然後你可以使用[extract()](http://php.net/manual/en/function.extract.php)將數組拆分成變量。 – treegarden

回答

1

這應該爲你工作:

首先你需要創建一個到相應的變量的引用數組。你可以簡單地用一個foreach循環做到這一點象下面這樣:

foreach($var as $v) { 
     $bindValues[] = &$$v; 
} 

這之後您可以使用call_user_func_array()調用函數來綁定變量。這取決於你使用的程序或OOP風格:

程序:

call_user_func_array("mysqli_stmt_bind_param", array_merge([$stmt, $types], $bindValues)); 

OOP:

call_user_func_array([$stmt, "bind_param"], array_merge([$types], $bindValues)); 
1

您可以使用eval()調用與參數動態號碼的功能。 EVAL的

// Construct the parameter string like "$var[0], $var[1], $var[2]" 
$param_str = ''; 
foreach($var as $key => $val) { 
    $param_str .= '$var['.$key.'],'; 
} 
$param_str = rtrim($param_str, ','); 

eval('call_to_function('.$param_str.');'); 

使用()不被認爲是很好的做法,但如果你確信你的數組鍵是$ var總是整數(如在你的榜樣默認鍵),那麼這應該是好去。

0

call_user_func_array()只是爲:

call_user_func_array(array($stmt, 'bind_param'), $var); 
相關問題