2013-11-28 15 views
5

Próbuję użyć tej samej wartości w różnych miejscach przy użyciu sprintf, ale nie.sprintf używając tych samych wartości wiele razy

<?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); 
?> 

otrzymuję ten błąd: 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

Odpowiedz

6

apostrofów zamiast cudzysłowach:

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

Zmienne są rozszerzane wewnątrz podwójnych cudzysłowów, więc $s potraktowano jako zmienna, a nie opcja formatowania.

Jeśli chcesz użyć cudzysłowów, można uciec znak dolara:

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

Potrzebuję tych podwójnych cytatów. Są tam z celem. – jmenezes

+0

Ok. Wstawiłem '\' przed '$' i teraz jest w porządku. – jmenezes

+0

Można również użyć konkatenacji zamiast interpolacji, aby dokonać substytucji zmiennych w łańcuchu. – Barmar

1

$ wewnątrz podwójnych cudzysłowach służy do zmiennej interpolacji, PHP szuka zmiennej $s tutaj. Użyj pomiędzy pojedynczymi cudzysłowami i ponumerować wszystkie swoje argumenty podczas gdy jesteś na to:

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

Potrzebuję tych cudzysłowów. Tam też są zmienne. Nie pokazuj tutaj, ale w skrypcie. – jmenezes

+0

Więc musisz uciec z '$' s, które mają być dosłowne '$' s: '" ...% 1 \ $ s ... "'. – deceze

+0

Ah! Tak! Właśnie to zrobiłem. Dzięki – jmenezes

Powiązane problemy