我在使用sprintf时尝试在不同的地方使用相同的值,但是失败了。
<?php
$score = 50;
$percent = 10;
$str = "Hello: You scored %s (%s%%). Your score is %2$s %%"; //Problem is here %2$s
echo sprintf($str,$score,$percent);
?>
我收到此错误:Notice: Undefined variable: s in C:\web\apache\htdocs\sprintf.php on line 6 Warning: sprintf(): Too few arguments in C:\web\apache\htdocs\sprintf.php on line 8
答案 0 :(得分:7)
使用单引号而不是双引号:
$str = 'Hello: You scored %s (%s%%). Your score is %2$s %%';
变量在双引号内展开,因此$s
被视为变量,而非格式选项。
如果你想使用双引号,你可以逃避美元符号:
$str = "Hello: You scored %s (%s%%). Your score is %2\$s %%";
答案 1 :(得分:1)
双引号字符串中的$
用于变量插值,PHP在此处查找变量$s
。使用单引号字符串并在您使用时为所有参数编号:
'Hello: You scored %1$s (%1$s%%). Your score is %2$s %%'