Recommendおすすめ記事
2021/07/06

【php】%1$sや%2$dの数字ってなんだろう・・・

kazuki

kazuki

2021/07/06
【php】%1$sや%2$dの数字ってなんだろう・・・
SHARE

こんにちはkazukiです。
phpやwordpressを触っていると「%1$s」や「%2$d」が出てきて、
「この数字って何を参照してるの?」ってことがあったので自分なりにメモしておきます。

いろいろ書いてあると混乱するので、見慣れている「年月日」にて記載したと思います。

ちなみに、私なりの覚え方になるので、よりわかりにくくなっていたらすみません。。。

コード

$year = "2021";
$manth ="7";
$day ="10";
$format = "%1\$s年 %2\$s月 %3\$s日 \n";
printf($format, $year, $manth, $day);

この出力結果は、2021年7月10日になります。

%1\$sなどは指定した文字列などを表示してくれます。

解説

間違っていた覚え方

最初、上記のようなコードを書いた時、

$year = "2021";
$manth ="7";
$day ="10";

で設定していた数字を、設定した順番で表示してくれていると勘違いしていました。

つまり

%1\$s = $year
%2\$s = $manth
%3\$s = $day

このような関係になっていて、それを$format = “%1\$s年 %2\$s月 %3\$s日 \n”;にはめ込み、
printf($format, $year, $manth, $day);で出力している。

このような感じかなと思いました。

しかし、これは少し間違いで、最後に記述したprintf($format, $year, $manth, $day);の順番が関係しているということに気付きました。

正解だった覚え方

printf('先に定義したフォーマット', 'フォーマットの1に定義される項目', 'フォーマットの2に定義される項目', 'フォーマットの3に定義される項目');

これが正解だった覚え方になります。
$formatで数字の設定を記述した後に、printfの順番の定義が来るので、そこが私の勘違いポイントでした。。。。

なので、もし$dayや$manthの順番を変えてもprintf内の順番を変えなければ出力には変化はありません。
以下いくつか例を記載します。

例:1

$day ="10";
$manth ="7";
$year = "2021";
$format = "%1\$s年 %2\$s月 %3\$s日 \n";
printf($format, $year, $manth, $day);

例:1の出力結果は、2021年7月10日になります。

例:2

$year = "2021";
$manth ="7";
$day ="10";
$format = "%1\$s年 %2\$s月 %3\$s日 \n";
printf($format, $day, $year, $manth);

例:2の出力結果は、10年2021月7日になります。

例:3

$year = "2021";
$manth ="7";
$day ="10";
$format = "%3\$s年 %1\$s月 %2\$s日 \n";
printf($format, $day, $year, $manth);

例:3の出力結果は、7年10月2021日になります。

上記のようになります。
なんだか例を書いていてパズルみたいで少し混乱しました。。。

以上、「%1$s」や「%2$d」の数字の関係性についての覚え方でした。

他の記事を探す
SHARE