如何使用动态数量的参数调用函数?

时间:2015-05-15 07:51:56

标签: php arrays mysqli prepared-statement bindparam

我有一个数组,我需要将数组的每个元素作为参数传递给函数。

说:

$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中获取参数。

有什么办法吗?

3 个答案:

答案 0 :(得分:1)

这应该适合你:

首先,您需要创建一个引用相应变量的数组。您可以使用如下的foreach循环执行此操作:

public boolean equals(Object o) {
    if (o == this)
        return true;
    if (!(o instanceof List))
        return false;

    ListIterator<E> e1 = listIterator();
    ListIterator e2 = ((List) o).listIterator();
    while (e1.hasNext() && e2.hasNext()) {
        E o1 = e1.next();
        Object o2 = e2.next();
        if (!(o1==null ? o2==null : o1.equals(o2)))
            return false;
    }
    return !(e1.hasNext() || e2.hasNext());
}

在此之后,您可以使用call_user_func_array()来调用函数来绑定变量。这取决于您使用过程式还是OOP式:

程序:

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

OOP:

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

答案 1 :(得分: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总是整数(就像你的示例默认键一样)那么这应该是好的。

答案 2 :(得分:-1)

call_user_func_array()就是为了这个:

call_user_func_array(array($stmt, 'bind_param'), $var);