PHPのprintf()関数, sprintf()関数

PHPは、引数で受け取った値を変換指定子でフォーマットするprintf()関数, sprintf()関数を備えています。printf()関数はフォーマットした値を出力し、sprintf()関数はフォーマットした値を戻り値として返します。これらの関数は、第1引数でフォーマット文字列を指定し、第2引数以降でフォーマットする値を指定します。

フォーマット文字列

第1引数のフォーマット文字列は、通常の文字列と変換指定子で構成します。変換指定子は、パーセント記号(%)の後に符号指定子、パディング指定子、アラインメント指定子、表示幅指定子、精度指定子、型指定子の順番で指定します。型指定子以外は省略可能です。

PHP

<?php
$y = 2011;
$m = 11;
$d = 1;
printf("%04d年%02d月%02d日", $y, $m, $d); // 出力:2011年11月01日
?>

型指定子

型指定子は、引数をどのような型で扱い、どのように表現するかを指定します。変換指定子において、型指定子は必須となります。

PHP

<?php
$a = 65.123456;
$b = 255;

// b:整数として扱い、2進数表現
printf("'%b'", $a); // 出力:'1000001'

// c:整数として扱い、ASCII値の文字列表現
printf("'%c'", $a); // 出力:'A'

// d:整数として扱い、10進数表現
printf("'%d'", $a); // 出力:'65'

// e:浮動小数点数として扱い、小文字の指数表現
printf("'%e'", $a); // 出力:'6.512346e+1'

// E:浮動小数点数として扱い、大文字の指数表現
printf("'%E'", $a); // 出力:'6.512346E+1'

// u:符号なし整数として扱い、10進数表現
printf("'%u'", $a); // 出力:'65'

// f:浮動小数点数として扱い、浮動小数点数表現
printf("'%f'", $a); // 出力:'65.123456'

// o:整数として扱い、8進数表現
printf("'%o'", $a); // 出力:'101'

// s:文字列として扱い、文字列表現
printf("'%s'", $a); // 出力:'65.123456'

// x:整数として扱い、小文字の16進数表現
printf("'%x'", $b); // 出力:'ff'

// X:整数として扱い、大文字の16進数表現
printf("'%X'", $b); // 出力:'FF'
?>

符号指定子

符号指定子は、数値に正負(+/-)の符号を付けるかを指定します。デフォルトでは、負の値のみ符号が付けられますが、正の値にも符号を付けたい場合は「+」を指定します。

PHP

<?php
$a = 65.123456;
printf("'%+d'", $a); // 出力:'+65'
?>

パディング指定子

パディング指定子は、後述する表示幅指定子の桁数を満たすために使用する文字列を指定します。デフォルトでは半角スペースが使用されます。通常は、0か半角スペースを指定しますが、それ以外の文字列を使用したい場合は、文字列の前にシングルクォートを付けます。

PHP

<?php
$a = 65.123456;
printf("'%010d'", $a); // 出力:'0000000065'
printf("'%'#10d'", $a); // 出力:'########65'
?>

アラインメント指定子

アラインメント指定子は、文字列のアラインメントを指定します。デフォルトは右寄せですが、「-」を指定すると左寄せになります。

PHP

<?php
$a = 65.123456;
printf("'%10d'", $a); // 出力:'        65'
printf("'%-10d'", $a); // 出力:'65        '
?>

表示幅指定子

表示幅指定子は、最低何桁で表示するかを数値で指定します。パディング指定子を省略した場合は、半角スペースで桁が埋められます。

PHP

<?php
$a = 65.123456;
printf("'%010d'", $a); // 出力:'0000000065'
printf("'%10d'", $a); // 出力:'        65'
?>

精度指定子

精度指定子は、浮動小数点数の小数点以下を何桁で表示するかを指定します。ピリオド「.」に続けて桁数を指定します。指定した桁以下は四捨五入されます。

PHP

<?php
$a = 65.123456;
printf("'%.5f'", $a); // 出力:'65.12346'
?>

引数の番号付け・交換

通常、フォーマット文字列内の変換指定子は、渡された引き数が順番に割り当てられます。しかし、変換指定子のパーセント記号(%)の直後に位置指定子(引数番号と$記号)で番号付けをすることにより、割り当ての順番を交換することができます。また、番号付けされた変換指定子は、同じフォーマット文字列内で複数回使用することができます。

PHP

<?php
$y = 2011;
$m = 11;
$d = 1;
printf("%04d年%02d月%02d日", $y, $m, $d); // 出力:2011年11月01日
printf("%3$04d年%1$02d月%2$02d日", $m, $d, $y); // 出力:2011年11月01日
?>
  • このエントリーをはてなブックマークに追加

Advertisement