【php】%1$sや%2$dの数字ってなんだろう・・・
kazuki
こんにちは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」の数字の関係性についての覚え方でした。