无法正确理解PHP中的vprintf()

时间:2017-07-02 19:01:08

标签: php string printf

我无法理解以下代码:

<?php
   $number = 123;
   vprintf("With 2 decimals: %1\$.2f
   <br>With no decimals: %1\$u",array($number));
?>

浏览器输出:

With 2 decimals: 123.00 
With no decimals: 123

但是这里只有一个元素在数组中,而它必须是两个参数。

%1\$

的含义是什么?

1 个答案:

答案 0 :(得分:8)

这是指定要使用哪个参数的方法。 %1$s表示第一个参数,%2$s表示第二个参数等。它是重新使用单个参数的一种方式,因此您不必多次提供相同的值。函数调用:

$one = 'one';
$two = 'two';

printf('%s', $one); // 'one'
printf('%1$s', $one); // 'one'
printf('%s %s', $one, $two); // 'one two'
printf('%1$s %2$s', $one, $two); // 'one two'
printf('%2$s %1$s', $one, $two); // 'two one'

printf('%1$s %2$s %1$s', $one, $two); // 'one two one'

在您的代码中,它使用\进行了转义,因为您的格式是双引号,这会尝试解析变量$.2f$u(其中&#如果美元符号没有被转义,则存在)。