renの成長記録

はやく大人になりたい

printf関数で出力のフォーマットを制御する。

ProgateのPHPコースを終え、「初めてのPHP」を読み始めたので、詰まったところをまとめます。

printf関数の使い方について

例:

<?php 
$year = 2018;
$month = 4;
$day = 1;

printf("%04d/%02d/%02d",$year, $month, $day); // => 2018/04/01 を出力。
?>

出力結果:

f:id:renchild:20180424160055p:plain

公式リファレンスより

int printf ( string $format [, mixed $args [, mixed $... ]] )

上記$format について

例:printf("%04d/%02d/%02d",$year, $month, $day)

例では"%04d/%02d/%02d"となっています。

こちらの$formatの部分をまとめました。

%」パーセント記号

例:printf("%04d/%02d/%02d",$year, $month, $day)

%」に他の引数$year, $month, $dayがそれぞれ代入されるようなイメージです。

具体的には

まず %04d$year

次に %02d$month

残りの%02d$day

が代入されるイメージです。(ここでの"/"はただの文字です。)

パディング指定子

%」の後ろの「0」はパディング指定子と呼ばれるものです。 後述する桁数に満たない場合に使う穴埋め文字です。 パディング指定子は省略した場合、「空白」として扱われます。

例:

<?php
$year = 2018;
$month = 4;
$day = 1;

printf("%4d/%2d/%2d",$year, $month, $day);  // => 2018/ 4/ 1 を出力。
?>

出力結果:

f:id:renchild:20180424162643p:plain

表示幅指定子

%0」に続いて「4」では表示幅指定子と呼ばれるもので、桁数を指定しています。 $yearは2018で4桁ですが、 $monthは4、$dayは1 なのでそれぞれ足りない桁数分0が入ります。

型指定子

%04」に続く「d」ですが、こちらは型指定子と呼ばれるものです。 「d」は10進数の整数を指定しています。 「d(整数)」の他に「s(文字列)」「f(double)」などがあります。

「初めてのPHP」では上記以外の型指定子は省略されているので本稿でも省略します。

精度指定子

型指定子に「f(double)」を指定する場合。 精度指定子「.(ピリオド)」を使います。

例:

<?php
$a = 0.12345;
printf("%.5f", $a); // => 0.12345 を出力。
?>

出力結果:

f:id:renchild:20180424201630p:plain

また、指定した桁以下は四捨五入されます。

例:

<?php
$a = 0.12345;
printf("%.4f", $a); // => 0.1235 を出力。
?>

出力結果:

f:id:renchild:20180424201926p:plain

引数の交換

ここまでは引数の順番通りに出力されていましたが、順番を変えることも出来ます。 「%3$」のように「%」の直後に引数の番号を指定(引数番号+$)することで、順番を変えることが出来ます。

例:

<?php
$year = 2018;
$month = 4;
$day = 1;

printf("%3$02d/%2$02d/%1$04d",$year, $month, $day);  // => 01/04/2018 を出力。
?>

出力結果:

f:id:renchild:20180424161657p:plain