У меня есть массив, и мне нужно передать каждый элемент массива в качестве параметров функции.
Сказать:
$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, принимает несколько параметров. И мне нужно получить параметры из массива.
Есть ли способ сделать это?
Это должно работать для вас:
Сначала вам нужно создать массив со ссылками на соответствующие переменные. Вы можете просто сделать это с помощью цикла foreach, как показано ниже:
foreach($var as $v) {
$bindValues[] = &$$v;
}
После этого вы можете использовать call_user_func_array()
вызвать функцию для привязки переменных. Здесь зависит, используете ли вы процедурный или ООП стиль:
процедурный:
call_user_func_array("mysqli_stmt_bind_param", array_merge([$stmt, $types], $bindValues));
ООП:
call_user_func_array([$stmt, "bind_param"], array_merge([$types], $bindValues));
Вы можете использовать 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.');');
Использование eval () не считается хорошей практикой, но если вы уверены, что ваши ключи массива $ var всегда целочисленные (как в вашем примере ключей по умолчанию), то это должно быть хорошо.
call_user_func_array()
только для этого:
call_user_func_array(array($stmt, 'bind_param'), $var);