2013-11-28 9 views
5

Sto provando a utilizzare lo stesso valore in luoghi diversi quando si utilizza sprintf, ma in mancanza.sprintf utilizzando gli stessi valori più volte

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

ottengo questo errore: 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

risposta

6

Usa virgolette singole al posto delle virgolette doppie:

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

variabili vengono espanse all'interno virgolette, in modo $s è stata trattata come una variabile, non un'opzione di formattazione.

Se si desidera usare le virgolette, si può sfuggire al simbolo del dollaro:

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

Ma ho bisogno di quelle doppie virgolette. Sono lì con uno scopo. – jmenezes

+0

Ok. Ho messo un '\' prima del '$' e va bene ora. – jmenezes

+0

È anche possibile utilizzare la concatenazione anziché l'interpolazione per eseguire sostituzioni variabili nella stringa. – Barmar

1

Un $ all'interno di doppi stringhe tra virgolette viene utilizzato per l'interpolazione variabile, PHP è alla ricerca per la variabile $s qui. Utilizzare stringhe singolo quotate e non conta tutti i vostri argomenti, mentre si è in esso:

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

ho bisogno di quei doppi apici. Ci sono anche delle variabili. Non mostrare qui, ma nella sceneggiatura. – jmenezes

+0

Bene, allora devi sfuggire ai '$' s che devono essere letterali '$' s: '" ...% 1 \ $ s ... "'. – deceze

+0

Ah! Sì! L'ho fatto solo Grazie – jmenezes

Problemi correlati