2013-11-28 23 views
5

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

答えて

6

使用単一引用符:あなたはそれでいる間、単一引用符で囲まれた文字列や数、すべての引数を使用し

変数は二重引用符の内側に展開され

$str = 'Hello: You scored %s (%s%%). Your score is %2$s %%'; 
を、そう $sはとして扱われていました変数であり、書式設定オプションではありません。

あなたは二重引用符を使用する場合は、ドル記号逃れることができます。

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

しかし、私はそれらの二重引用符が必要です。彼らは目的を持ってそこにいる。 – jmenezes

+0

私は '$'の前に '\'を置いていますが、今は問題ありません。 – jmenezes

+0

補間の代わりに連結を使用して、文字列内の変数置換を実行することもできます。 – Barmar

1

は、二重引用符で囲まれた文字列の内部$は、変数補間のために使用され、PHPは、ここで変数$sを探しています。代わりに二重引用符の

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

を私はそれらの二重引用符を必要としています。そこにも変数があります。ここには表示されませんが、スクリプトには表示されません。 – jmenezes

+0

それでは、 '$' sをリテラル '$' sのためにエスケープする必要があります: '" ... ...%1 \ $ s ... "'。 – deceze

+0

ああ!はい!私はちょうどそれをやった。ありがとう – jmenezes

関連する問題