将参数插入字符串

Inserting arguments into string

在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 结合使用会非常有用,因为翻译人员可以更改字符串中变量的顺序。它还可以允许多次插入同一个变量,这很有用。

你可以写一个 util 来做:

function sprintn($format,$args = array()){
 for ($i=1; i<=count($args); i++){
   $format = str_replace("%".$i, $args[i], $format);
 }
 return $format;
}

我寻求以下解决方案。通过使用 strtr instead of 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);
}