在PHP中,可以使用sprintf
将变量插入字符串。如果我有两个字符串变量$a
和$b
,可以将它们插入到另一个字符串中,如下所示:
$string = sprintf("String containing %s two other strings %s", $a, $b);
是否有一个函数使得字符串可以指定插入的变量的顺序?我想指定要插入的变量,而不是指定插入变量的格式。例如:
$string = sprintn("String containing %2 two other strings %1 in opposite order", $a, $b);
这与gettext
结合使用非常有用,因为翻译人员可以更改字符串中变量的顺序。它也可以允许多次插入相同的变量,这很有用。
答案 0 :(得分:0)
您可以编写一个util来执行此操作:
function sprintn($format,$args = array()){
for ($i=1; i<=count($args); i++){
$format = str_replace("%".$i, $args[i], $format);
}
return $format;
}
答案 1 :(得分:0)
我选择了以下解决方案。通过使用strtr
而不是str_replace
,它的优点是不会递归替换参数中可能出现的%n
出现的任何事件。
function sprintn($format) {
$args = [];
for($i = 1; $i < func_num_args(); ++$i)
$args["%$i"] = func_get_arg($i);
return strtr($format, $args);
}