printf( string $format[, mixed $args[, mixed $... ]] )
は、フォーマット「$format」に基づき生成した文字列を出力する組み込み関数。
vprintf()関数と似ているが、フォーマットしたいデータを、配列ではなく、可変長引数で指定する点が異なる。
フォーマットに基づき生成した文字列を、出力するのではなく、返したいときは、sprintf()関数を使う。
定義
パラメータ
- 文字列型 $format
フォーマット。
- 多様な型 $args
オプション。
フォーマットしたいデータ。
- 多様な型 $…
オプション。
フォーマットしたいデータは、カンマ
,
で区切り、複数指定できる。
フォーマット
%
の後に、空白は入れずに、指定子を続けて記述する。
- 位置指定子
オプション。
フォーマットしたいデータが複数あり、順番を入れ替えたい場合に使う。
n番目のデータを、
n$
とする。1番目のデータは、1$
。5番目のデータは、5$
となる。- 変換指定子
下記の変換指定子を、1つ以上続けて記述する。
- 符号指定子
オプション。
何も指定しないと、負の数にだけ、符号を付ける。正の数には、プラス符号「+」を付けない。負の数には、マイナス符号「-」を付ける。
+
を指定すると、正の数にも、符号を付ける。正の数には、プラス符号「+」を付け、負の数には、マイナス符号「-」を付ける。- パディング指定子
オプション。
「表示幅指定子」に指定した長さになるまで、どんな文字で埋めるかを指定する。
- 半角空白: 半角空白で埋める。初期設定値。
- 0:
0
で埋める。ゼロパディング。 '任意の一文字
: 単一引用符'
に続く「任意の一文字」で埋める。
- アラインメント指定子
オプション。
左寄せか、右寄せかを指定する。
初期設定値は、右寄せ。
-
を指定すると、左寄せ。- 表示幅指定子
オプション。
最低何桁にするかを、数字で指定。
- 精度指定子
オプション。
数字で指定。
浮動小数点数の場合、小数点以下の小数部を、「精度指定子」に指定した数の位まで表示する。
文字列の場合、「精度指定子」に指定した文字数を超える文字を切り捨てる。
- 型指定子
オプション。
引数の「多様な型 $args」や「多様な型 $…」を、何のデータ型で扱うかを指定する。
- %: パーセント記号。
- b: 引数を整数として扱い、2進数に変換。
- c: 引数を整数として扱い、ASCII値の文字として表現。
- d: 引数を整数として扱い、10進数に変換。
- e: 引数を科学記法として扱う。小文字を使う。
- E: 引数を科学記法として扱う。大文字を使う。
- u: 引数を整数として扱い、符号がない10進数に変換。
- f: 引数をdoubleとして扱い、浮動小数点数として表現。
- F: 引数をfloatとして扱い、浮動小数点数として表現。
- g: %e および %f の短縮形。
- G: %E および %f の短縮形。
- o: 引数を整数として扱い、 8進数に変換。
- s: 引数を文字列として扱う。
- x: 引数を整数として扱い、16進数(小文字)に変換。
- X: 引数を整数として扱い、16進数(大文字)に変換。
構文
フォーマット済み文字列を出力(1)
「フォーマット」に基づき生成した文字列を出力する。
フォーマット済み文字列を出力(2)
「フォーマット」に基づき生成した文字列を出力する。
戻り値
出力した文字列の長さを返す。
サンプル
整数を、様々な変換指定子でフォーマット
$var = 123;
printf( "<p>%%d: [%d]</p>", $var );
printf( "<p>%%+d: [%+d]</p>", $var );
printf( "<p>%%5d: [%5d]</p>", $var );
printf( "<p>%%05d: [%05d]</p>", $var );
printf( "<p>%%'#5d: [%'#5d]</p>", $var );
printf( "<p>%%'#-5d: [%'#-5d]</p>", $var );
printf( "<p>%%.2s: [%.2s]</p>", $var );
?>
↓↓↓出力結果↓↓↓
%+d: [+123]
%5d: [ 123]
%05d: [00123]
%'#5d: [##123]
%'#-5d: [123##]
%.2s: [12]
出力したフォーマット済みの文字列の長さを取得
$var = 123;
$varCount = printf( "<p>%%05d: [%05d]</p>", $var );
echo "<p>文字列の長さは、{$varCount}</p>";
?>
↓↓↓出力結果↓↓↓
文字列の長さは、20
小数を、様々な変換指定子でフォーマット
$var = 1.23456789;
printf( "<p>%%f: %f</p>", $var );
printf( "<p>%%+f: %+f</p>", $var );
printf( "<p>%%0.10f: %0.10f</p>", $var );
printf( "<p>%%.3f: %.3f</p>", $var );
printf( "<p>%%.3s: %.3s</p>", $var );
?>
↓↓↓出力結果↓↓↓
%+f: +1.234568
%0.10f: 1.2345678900
%.3f: 1.235
%.3s: 1.2
文字列を、様々な変換指定子でフォーマット
$var = "sample";
printf( "<p>%%s: [%s]</p>", $var );
printf( "<p>%%+s: [%+s]</p>", $var );
printf( "<p>%%10s: [%10s]</p>", $var );
printf( "<p>%%010s: [%010s]</p>", $var );
printf( "<p>%%'#10s: [%'#10s]</p>", $var );
printf( "<p>%%'#-10s: [%'#-10s]</p>", $var );
printf( "<p>%%.3s: [%.3s]</p>", $var );
?>
↓↓↓出力結果↓↓↓
%+s: [sample]
%10s: [ sample]
%010s: [0000sample]
%'#10s: [####sample]
%'#-10s: [sample####]
%.3s: [sam]
日付を、フォーマット
$varYear = 2012;
$varMonth = 7;
$varDay = 3;
$format = '%04d-%02d-%02d';
printf( "<p>年月日(YYYY-MM-DD): $format</p>", $varYear, $varMonth, $varDay );
$format = '%2$02d-%3$02d-%1$04d';
printf( "<p>月日年(MM-DD-YYYY): $format</p>", $varYear, $varMonth, $varDay );
$format = '%3$02d-%2$02d-%1$04d';
printf( "<p>日月年(DD-MM-YYYY): $format</p>", $varYear, $varMonth, $varDay );
$format = '%04d年%02d月%02d日';
printf( "<p>年月日(YYYY年MM月DD日): $format</p>", $varYear, $varMonth, $varDay );
?>
↓↓↓出力結果↓↓↓
月日年(MM-DD-YYYY): 07-03-2012
日月年(DD-MM-YYYY): 03-07-2012
年月日(YYYY年MM月DD日): 2012年07月03日
複数の整数を、フォーマット
$varA = 1;
$varB = 2;
$varC = 3;
$varD = $varA+$varB+$varC;
$format = '%d+%d+%d=%d';
printf( "<p>$format</p>", $varA, $varB, $varC, $varD );
$format = '%1$d+%2$d+%3$d=%4$d';
printf( "<p>$format</p>", $varA, $varB, $varC, $varD );
$format = '%3$d+%2$d+%1$d=%4$d';
printf( "<p>$format</p>", $varA, $varB, $varC, $varD );
?>
↓↓↓出力結果↓↓↓
1+2+3=6
3+2+1=6
整数を、様々な型指定子でフォーマット
$var = 123;
printf( "<p>%%b: %b</p>", $var );
printf( "<p>%%c: %c</p>", $var );
printf( "<p>%%d: %d</p>", $var );
printf( "<p>%%e: %e</p>", $var );
printf( "<p>%%E: %E</p>", $var );
printf( "<p>%%u: %u</p>", $var );
printf( "<p>%%f: %f</p>", $var );
printf( "<p>%%F: %F</p>", $var );
printf( "<p>%%g: %g</p>", $var );
printf( "<p>%%G: %G</p>", $var );
printf( "<p>%%o: %o</p>", $var );
printf( "<p>%%s: %s</p>", $var );
printf( "<p>%%x: %x</p>", $var );
printf( "<p>%%X: %X</p>", $var );
?>
↓↓↓出力結果↓↓↓
%c: {
%d: 123
%e: 1.230000e+2
%E: 1.230000E+2
%u: 123
%f: 123.000000
%F: 123.000000
%g: 123
%G: 123
%o: 173
%s: 123
%x: 7b
%X: 7B