2012-07-24 9 views

答えて

37

%記号が前に付いたprintfまたはsprintf文字はプレースホルダ(またはトークン)です。それらは引数として渡される変数に置き換えられます。

例:

$str1 = 'best'; 
$str2 = 'world'; 

$say = sprintf('Tivie is the %s in the %s!', $str1, $str2); 
echo $say; 

この意志出力:

Tivieは世界で最高です!

注:より多くのプレースホルダがあります(%sの文字列のため、12月の番号などの%dが...)


注文:

を渡す順序を議論は重要です。あなたは

$say = sprintf('Tivie is the %s in the %s!', $str2, $str1); 

としての$ str2を持つ$ STR1を切り替える場合には、

"Tivieは最高の世界です!" 印刷します

ただし、このような引数の読み取り順序を変更することができます。

正しく文を印刷します
$say = sprintf('Tivie is the %2$s in the %1$s!', $str2, $str1); 


また、PHPは動的言語であり、明示的な型定義を必要としない(またはサポートする)ことを覚えておいてください。つまり、必要に応じて変数の種類を混乱させることになります。スプリントでは、数値プレースホルダ(%d)の引数として "文字列"を渡すと、その文字列が奇妙な結果を持つ数値(int、float ...)に変換されることを意味します。ここでは例です:

$onevar = 2; 
$anothervar = 'pocket'; 
$say = sprintf('I have %d chocolate(s) in my %d.', $onevar, $anothervar); 
echo $say; 

これは私がPHPdocs

+0

Nedの説明と一緒にあなたの例がかなり確かな答えをすると思います。質問:私が 'sprintf( 'Tivieは%s!、$ str2、$ str2に%sです)と書いて、' 'Tivieは最高の世界です! –

+1

str2 = world、 – Tivie

+0

、typo'sのために、 "Tivieは世界の世界です"と出力します。私はそれから笑いを得ました。したがって、 '%strn'は'%s [n] 'の値を返します。同じ記法で、 '%s%s'は'%s [0]%s [1] 'の値を返します。 –

9

printfにおいて、%s文字列に挿入されるデータのプレースホルダーです。 printfの余分な引数は、挿入される値です。位置的にプレースホルダに関連付けられます。最初のプレースホルダは最初の値を取得し、2番目の値は2番目の値などを取得します。

+1

で私は0

もっと読書中2チョコレート(複数可)を持っている

を出力します '+ 1 ' - ところで、これの正しい用語は文字列補間です。 –

+0

明らかにCの 'printf'と同じ構文です。 –

1
$num = 5; 
$location = 'tree'; 

$format = 'There are %d monkeys in the %s'; 
echo sprintf($format, $num, $location); 

出力:「ツリーには5つのサルがあります。」

+1

編集してくれてありがとう、Ned。私は4回編集しましたが、それはまだ機能しませんでした。マークダウンはちょっと台無しになっているに違いない。 – David

+0

これはもっと注意を必要とする超良い答えです。 –

+0

PHPマニュアルから直接: –

3

%sは、%sの場合、貴重な値(文字列)に置き換えられる型指定子です。 - 引数を整数として扱い、(署名)進数として提示され

D:

%sのほかに、あなたは以下の通りです最も人気のある他のspecifiers、使用することができます。

f - 引数は浮動小数点として扱われ、浮動小数点数(ロケール 認識)として表されます。

s - 引数は、文字列として扱われ、文字列として表されます。

関連する問題