Как я могу вызвать функцию с динамическим количеством аргументов?

У меня есть массив, и мне нужно передать каждый элемент массива в качестве параметров функции.

Сказать:

$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, принимает несколько параметров. И мне нужно получить параметры из массива.

Есть ли способ сделать это?

0

Решение

Это должно работать для вас:

Сначала вам нужно создать массив со ссылками на соответствующие переменные. Вы можете просто сделать это с помощью цикла 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));
1

Другие решения

Вы можете использовать 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 всегда целочисленные (как в вашем примере ключей по умолчанию), то это должно быть хорошо.

1

call_user_func_array() только для этого:

call_user_func_array(array($stmt, 'bind_param'), $var);
0
По вопросам рекламы [email protected]