将变量参数列表传递给sprintf()

时间:2009-10-22 12:15:51

标签: php parameters arguments printf

我想编写一个函数(除其他外)接受可变数量的参数,然后将它们传递给sprintf()。

例如:

<?php
function some_func($var) {
  // ...
  $s = sprintf($var, ...arguments that were passed...);
  // ...
}

some_func("blah %d blah", $number);
?>

我如何在PHP中执行此操作?

5 个答案:

答案 0 :(得分:25)

function some_func() {
    $args = func_get_args();
    $s    = call_user_func_array('sprintf', $args);
}

// or

function some_func() {
    $args = func_get_args();
    $var  = array_shift($args);
    $s    = vsprintf($var, $args);
}

$args临时变量是必要的,因为func_get_args不能在5.3之前的PHP版本的函数的参数列表中使用。

答案 1 :(得分:1)

使用func_get_argscall_user_func_array

的组合
function f($var) { // at least one argument
  $args = func_get_args();
  $s = call_user_func_array('sprintf', $args);
}

答案 2 :(得分:0)

使用$ numargs = func_num_args(); 和func_get_arg(i)检索参数

答案 3 :(得分:0)

这是方法:

http://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list

基本上,你像往常一样声明你的函数,没有参数,然后你调用func_num_args()来找出它们传递了多少个参数,然后通过调用func_get_arg()或func_get_args()得到每个参数。这很简单:)

答案 4 :(得分:0)

或者更好(也更安全一点):

function some_func(string $fmt, ... $args) {
    $s = vsprintf($fmt, $args);
}

这是 PHP 7.4,不确定它是否适用于早期版本。