【问题标题】:How do I pass all elements of an array (of unknown length) to a function as separate parameters? [duplicate]如何将数组(长度未知)的所有元素作为单独的参数传递给函数? [复制]
【发布时间】:2016-06-10 22:37:40
【问题描述】:

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

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

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

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

我的问题是,如果数组的长度未知,如何产生与上述相同的结果?例如,它可能是五个、十个或 15 个元素长。

【问题讨论】:

  • 如果您正在运行 php>=5.6 并可以访问令人垂涎的 splat 运算符,请特别查看 this answer
  • @JeffPuckettII 谢谢。我去看看!

标签: php arrays function mysqli


【解决方案1】:

使用 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));

【讨论】:

  • 哇,我喜欢你的 phpthis question
  • @JeffPuckettII 我不确定我是否理解这个问题。今天有点晚了:)
  • 这是一个重复的问题,你的答案比原来的要好,所以我建议你也把它加在那里以供以后的读者阅读。
  • 我认为这行不通,因为bind_param 接受引用参数。
  • 这个问题比另一个问题要具体得多,阅读它(更不用说那里的答案)让我流鼻血。我不认为它是重复的,但你生活和学习......
猜你喜欢
  • 2012-05-24
  • 2020-08-16
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 2015-06-23
  • 2013-07-11
相关资源
最近更新 更多