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

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

例如:

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

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

我该如何在PHP中实现这个功能?

5个回答

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临时变量是必需的,因为在PHP 5.3之前的版本中无法在函数参数列表中使用func_get_args


哦,我不知道有关于vsprintf的事情。谢谢 :) - Rob
非常感谢您的vsprint(),我希望我能给您更多的赞。 - Sandeepan Nath

2
或者更好的方法(也更安全)是:

,这与编程有关,保留了HTML标记。
function some_func(string $fmt, ... $args) {
    $s = vsprintf($fmt, $args);
}

这是PHP 7.4,不确定其在早期版本中是否可用。


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);
}

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接