如何将数组的所有元素(未知长度)作为单独的参数传递给函数?

时间:2016-06-10 22:37:41

标签: php arrays function mysqli

我在PHP中有一个数组,可能包含如下数据:

$data = array("Apples", "Oranges", "Grapes", "Pears");

然后,我想将这些值传递到mysqli bind_param函数中。对于这个例子,它看起来像这样:

$stmt->bind_param("ssss", $data[0], $data[1], $data[2], $data[3]);

我的问题是,如果数组的长度未知,我怎样才能产生与上面相同的结果?例如,它可能是5个,10个或15个元素。

1 个答案:

答案 0 :(得分:5)

PHP 5.6或更高版本

$stmt->bind_param(str_repeat("s", count($data)), ...$data);

使用 PHP 5.5或更低版本,您可能(以及所做的)期望以下工作:

call_user_func_array(
    array($stmt, "bind_param"),
    array_merge(array(str_repeat("s", count($data))), $data));

...但是mysqli_stmt::bind_param期望它的参数是引用,而这会传递一个值列表(感谢Barmar指出这一点)。

你可以通过首先创建一个对原始数组的引用数组来解决这个问题(虽然这是一个丑陋的解决方法)。

$references_to_data = array();
foreach ($data as &$reference) { $references_to_data[] = &$reference; }
unset($reference);
call_user_func_array(
    array($stmt, "bind_param"),
    array_merge(array(str_repeat("s", count($data))), $references_to_data));