sprintf, используя одни и те же значения несколько раз

Я пытаюсь использовать одно и то же значение в разных местах при использовании 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

Используйте одинарные кавычки вместо двойных кавычек:

 $str = 'Hello: You scored %s (%s%%). Your score is %2$s %%'; 

Переменные расширяются внутри двойных кавычек, поэтому $s рассматривается как переменная, а не опция форматирования.

Если вы хотите использовать двойные кавычки, вы можете избежать знака доллара:

 $str = "Hello: You scored %s (%s%%). Your score is %2\$s %%"; 

Для переменной интерполяции используется $ внутри двойных кавычек, PHP ищет переменную $s здесь. Используйте одинарные кавычки и укажите все свои аргументы, пока вы на нем:

 'Hello: You scored %1$s (%1$s%%). Your score is %2$s %%'