我想编写一个函数(除其他外)接受可变数量的参数,然后将它们传递给sprintf()。
例如:
<?php
function some_func($var) {
// ...
$s = sprintf($var, ...arguments that were passed...);
// ...
}
some_func("blah %d blah", $number);
?>
我如何在PHP中执行此操作?
答案 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_args
和call_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,不确定它是否适用于早期版本。