
どうもタスです。
今回は、PHPのprintf関数についての説明と使い方をお伝えします。
printfは、ログ出力など出力形式を統一したい場合などに重宝する関数ですので、特にフォーマット方法について熟知し使えるようにしましょう!
なお、文字列をフォーマットする関数はprintf以外にも数種類あり、以下の記事で類似点と相違点をまとめています。
概要説明
フォーマット済みの文字列を出力する
構文説明
1 |
printf (string $format [, mixed $srgs [, mixed $...]]) : int |
〈引数〉string $format:フォーマット文字列
〈返り値〉出力した文字列の長さ
詳細説明
printfは、指定したフォーマット文字列の形式で文字列を返す関数です。
フォーマット次第では、引数を複数指定しても構いません。
具体的なフォーマット方法は以下の通りです。
フォーマット文字列
フォーマット文字列は、出力したい文字列と変換指定子(conversion specifications)で表現します。
各変換指定子は、パーセント記号(%)に続けて以下の要素を記述したものとなります。
符号指定子
数値で符号を使用する場合に指定します。
指定しなければ、負数の場合の「-」符号のみが付加されますが、指定した場合は整数の場合の「+」も強制的に付加されます。
なお、以下の例の「%%」は、パーセント文字をエスケープするためのものです。
1 2 3 4 5 6 7 |
<?php $seisu = 100; $husu = -100; printf("「%%+dフォーマット」 = '%+d'<br>", $seisu); // 正の整数に符号指定子を使用 printf("「%%+dフォーマット」 = '%+d'<br>", $husu); // 負の整数に符号指定子を使用 |
出力例
「%+dフォーマット」 = ‘+100’
「%+dフォーマット」 = ‘-100’
パディング指定子
文字列を必要な長さまでどの文字で埋めるかということを指定します。
パディング文字は空白文字もしくは「0」のいずれかで、デフォルトでは空白文字で埋めます。
なお、上記以外の文字列で埋めたい場合は、当該文字列の前に「’」(シングルクォーテーション)を記述します。
以下の例はコマンドラインで実行したものです(HTMLだと空白が省略されるため)。
1 2 3 4 5 6 7 8 9 |
<?php $str = 'TasuLife'; $len = 20; printf("「%%sフォーマット」 = [%s]\n", $str); // 標準の文字列出力 printf("「%%{$len}sフォーマット」 = [%{$len}s]\n", $str); // 空白文字で埋める printf("「%%0{$len}sフォーマット」 = [%0{$len}s]\n", $str); // ゼロ埋めは文字列でも可能です。 printf("「%%'@{$len}sフォーマット」 = [%'@{$len}s]\n", $str); // ゼロの代わりに独自の文字 '@' で埋めます。 |
出力例
「%sフォーマット」 = [TasuLife]
「%20sフォーマット」 = [ TasuLife]
「%020sフォーマット」 = [000000000000TasuLife]
「%’@20sフォーマット」 = [@@@@@@@@@@@@TasuLife]
アライメント指定子
出力文字列を左寄せまたは右寄せにしたい場合に指定します。
デフォルトは右寄せで、左寄せにしたい場合は「-」を指定します。
1 2 3 4 5 6 7 8 |
<?php $str = 'TasuLife'; $len = 20; printf("「%%sフォーマット」 = [%s]\n", $str); // 標準の文字列出力 printf("「%%{$len}sフォーマット」 = [%{$len}s]\n", $str); // 文字を右寄せ printf("「%%-{$len}sフォーマット」 = [%-{$len}s]\n", $str); // 文字を左寄せ |
出力例
「%sフォーマット」 = [TasuLife]
「%20sフォーマット」 = [ TasuLife]
「%-20sフォーマット」 = [TasuLife ]
表示幅指定子
これは指定した数字のことで、出力文字列を最低何桁表示するか指定します。
パディング指定子で指定した「20」がそれにあたります。
精度指定子
浮動小数点に対して数字を何桁表示するか、文字列の場合は切り捨て位置の指定となり、指定数を超えた文字列は切り捨てられます。
さらに、桁埋めに使用する文字も指定することができます。
指定方法は、「.」以降に数値を指定します。桁埋め文字列は、「.」と数値の間に指定します。
1 2 3 4 5 6 7 8 9 10 11 |
<?php $num = 123.456789; $str = 'TasuLife is interesting'; $leni = 3; $lens = 15; printf("「%%fフォーマット」 = [%f]<br>", $num); // 標準の浮動小数点数出力 printf("「%%.{$leni}fフォーマット」 = [%.{$leni}f]<br>", $num); // 小数点以下を3桁まで出力 printf("「%%sフォーマット」 = [%s]<br>", $str); // 標準の文字列出力 printf("「%%.{$lens}sフォーマット」 = [%.{$lens}s]<br>", $str); // 文字を15桁まで出力 |
出力例
「%fフォーマット」 = [123.456789]
「%.3fフォーマット」 = [123.457]
「%sフォーマット」 = [TasuLife is interesting]
「%.15sフォーマット」 = [TasuLife is int]
型指定子
指定した引数を何の型として扱うかを指定します。
指定可能な型は以下の通りです。
%:パーセント文字。
b:引数を整数として扱い、2進数として表現します。
c:引数を整数として扱い、ASCII値の文字として表現します。
d:引数を整数として扱い、10進数として表現します。
e:引数を科学記法として扱います(例:1.2e+2)。精度の指定子は、PHP5.2.1以降では小数点以下の桁数を表します。それより前のバージョンでは、有効数字の桁数(ひとつ小さい値)を意味していました。
E:%eと同じですが、大文字を使います(例:1.2E+2)。
f:引数をdoubleとして扱い、浮動小数点数として表現します。
F:引数をfloatとして扱い、浮動小数点数として表現します(ロケールに依存しません)。PHP5.0.3以降で使用可能です。
g:%eおよび%fの短縮形。
G:%Eおよび%fの短縮形。
o:引数を整数として扱い、8進数として表現します。
s:引数を文字列として扱い、表現します。
u:引数を整数として扱い、符号無しの10進数として表現します。
x:引数を整数として扱い、16進数として(小文字で)表現します。
X:引数を整数として扱い、16進数として(大文字で)表現します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $num = 12345678; $n_num = -12345678; $cha = 65; // ASCII コードの 65 は 'A' です。 printf("%%b = '%b'<br>", $num); // 2進表現 printf("%%c = '%c'<br>", $cha); // ascii文字を表示します。chr()関数と同じです printf("%%d = '%d'<br>", $num); // 標準の整数表現 printf("%%e = '%e'<br>", $num); // 科学記法 printf("%%E = '%E'<br>", $num); // 科学記法(大文字) printf("%%f = '%f'<br>", $num); // 浮動小数点表現(double) printf("%%F = '%F'<br>", $num); // 浮動小数点表現(float) printf("%%o = '%o'<br>", $num); // 8進表現 printf("%%s = '%s'<br>", $num); // 文字列表現 printf("%%u = '%u'<br>", $num); // 正の整数の符号なし整数表現 printf("%%u = '%u'<br>", $n_num); // 負の整数の符号なし整数表現 printf("%%x = '%x'<br>", $num); // 16進表現(小文字) printf("%%X = '%X'<br>", $num); // 16進表現(大文字) |
出力例
%b = ‘101111000110000101001110’
%c = ‘A’
%d = ‘12345678’
%e = ‘1.234568e+7’
%E = ‘1.234568E+7’
%f = ‘12345678.000000’
%F = ‘12345678.000000’
%o = ‘57060516’
%s = ‘12345678’
%u = ‘12345678’
%u = ‘18446744073697205938’
%x = ‘bc614e’
%X = ‘BC614E’