PHP - 将数组作为可变长度参数列表传递

时间:2012-01-28 12:52:25

标签: php arrays function variadic-functions

我的PHP脚本中有一个非常简单的问题。定义了一个函数,该函数采用可变长度参数列表

function foo() {
  // func_get_args() and similar stuff here
}

当我这样打电话时,它运作得很好:

foo("hello", "world");

但是,我在数组中有我的变量,我需要将它们“单独”作为函数的单个参数传递。例如:

$my_args = array("hello", "world");
foo(do_some_stuff($my_args));

是否有任何 do_some_stuff 函数为我分割参数,以便将它们传递给函数?

8 个答案:

答案 0 :(得分:17)

答案 1 :(得分:6)

你需要call_user_func_array

call_user_func_array('foo', $my_args);

http://php.net/manual/en/function.call-user-func-array.php

答案 2 :(得分:3)

您正在搜索call_user_func_array()

  

http://it2.php.net/manual/en/function.call-user-func-array.php

用法:

$my_args = array("hello", "world");
call_user_func_array('foo', $my_args);

// Equivalent to:
foo("hello", "world");

答案 3 :(得分:2)

听起来像是在寻找call_user_func_array

答案 4 :(得分:0)

答案 5 :(得分:0)

如果您可以更改foo()的代码,则只需在一个地方轻松解决此问题。

function foo()
{
    $args = func_get_args();
    if(count($args) == 1 && is_array($args[0]))
    {
        $args = $args[0]
    }
    // use $args as normal
}

答案 6 :(得分:0)

根本不建议使用此解决方案,只是展示了一种可能性:

使用eval

eval ( "foo('" . implode("', '", $args_array) . "' )" );

答案 7 :(得分:0)

我知道这是一个老问题,但它仍然作为第一个搜索结果出现 - 所以这里有一个更简单的方法;

<?php
function add(... $numbers) {
    $result=0;
    foreach($numbers as $number){
      $result+=intval($number);
    }
    return $result;
}

echo add(...[1, 2])."\n";

$a = [1, 2];
echo add(...$a);
?>

来源: https://www.php.net/manual/en/functions.arguments.php#example-142