将参数插入字符串
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);
}
在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);
}