将参数插入到字符串中

时间:2015-05-21 17:20:05

标签: php string insert printf

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

2 个答案:

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