2013-11-28 9 views
5

Ich versuche, den gleichen Wert an verschiedenen Orten zu verwenden, wenn Sie sprintf verwenden, aber fehlgeschlagen.Sprintf mit den gleichen Werten mehrmals

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

ich diesen Fehler: 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

Antwort

6

Benutzen Sie statt doppelte Anführungszeichen:

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

Variablen in doppelte Anführungszeichen erweitert werden, so wurde $s behandelt wie eine Variable, keine Formatierungsoption.

Wenn Sie doppelte Anführungszeichen verwenden möchten, können Sie das Dollarzeichen entkommen:

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

Aber ich brauche diese Anführungszeichen. Sie sind mit einem Ziel dort. – jmenezes

+0

Ok. Ich stelle ein '\' vor das '$' und es ist jetzt in Ordnung. – jmenezes

+0

Sie können auch eine Verkettung anstelle einer Interpolation verwenden, um variable Ersetzungen in der Zeichenfolge durchzuführen. – Barmar

1

A $ innerhalb der doppelten Anführungszeichen für variable Interpolation verwendet wird, wird PHP hier für die Variable $s suchen. Benutzen Strings in Anführungszeichen und Nummer alle Argumente, während Sie gerade dabei sind:

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

Ich brauche diese doppelte Anführungszeichen. Dort sind auch Variablen drin. Nicht hier, aber im Drehbuch. – jmenezes

+0

Nun, dann müssen Sie die '$' s, die als Literal '$' s gedacht sind, umgehen: '" ...% 1 \ $ s ... "'. – deceze

+0

Ah! Ja! Ich habe genau das gemacht. Danke – jmenezes

Verwandte Themen