こんにちは、
最近ジムでの運動にはまってしまい筋肉痛のサトウです。
さて、本題に入りたいと思います。
php言語では月・日を2桁埋めしたり、IDを0埋めして表示する方法があることはご存知ですか?今回はこのような0埋め(ゼロパディング)できる方法を紹介させて頂きます。
0埋めする必要性や実装方法について分からない方は、ぜひ読んでみてくださいね。
「0埋め(ゼロパディング)」を使うケース
書き方を説明する前に、ステム開発や運用ではどんな場面に「0埋め」が必要か考えてみましょう。
最も分かりやすいのは日付の記述です。
・7月2日→07月02日と表示する場合
こちらは何となくイメージできますよね。
日付以外だと以下のように使われるケースもあります。
・webサイトやブログの来訪者を表示する場合
「あなたは現在 078人目のサイト来訪者です」
・商品やチケットの予約番号・IDを管理する場合
例)予約日や申込日にIDをつけて番号を裁判する場合
ID番号:2020020700012
20200207→2020年2月7日に予約
00012→申込者固有の番号
1度は目にしたことがある方もいるのではないでしょうか。
このように、「0埋め」はあらかじめ桁数や表示ルールを決めるとシステムを運用しやすくなる、という点をご理解頂けたと思います。
phpで「0埋め(ゼロパディング)」を実装する方法
ここからは具体的なコードの書き方について見ていきます。
phpではsprintf関数とstr_pad関数で0埋めをすることが可能です。
sprintf関数
sprintf関数は以下のように使用することができます。例を用いて確認してみましょう。
(例)数値「1」に「0」をつけて「01」と表示する場合
sprintf(‘%02d’,1);
第1引数:’%+埋める文字+桁数’という構造です。
今回は0をつけて2文字で埋めるので’%02d’を記載します。
第2引数:対象の数値を指定します。今回は「1」ですね。
注意第1引数は【’’】(シングルクォーテーション)で囲むようにしましょう。
また第2引数は「数値」「文字列」「変数」いずれでも可能です。
こちらも実際のコードサンプルで見てみましょう。
(1)第2引数に「数値型」を指定する場合
1 2 3 4 5 6 7 8 |
<?php //(1)数値を使う場合 echo '(1)数値「1」を表示します<br>'; echo sprintf('%02d',1).'<br>'; echo sprintf('%03d',1).'<br>'; echo sprintf('%04d',1).'<br>'; ?> |
実行結果はこのとおりです。
実際はこの第2引数に「数値型」を指定するケースが最も多いはずです。
あまりありませんが、「文字列型」で指定することも可能です。
(2)第2引数に「文字列型」を指定する場合
1 2 3 4 5 6 7 8 |
<?php //(2)文字列を使う場合 //1をシググルクォート''で囲っているので、「文字列」にしています echo '(2)文字列「1」を表示します<br>'; echo sprintf('%02d','1').'<br>'; echo sprintf('%03d','1').'<br>'; echo sprintf('%04d','1').'<br>'; ?> |
実行結果はこのようになります。
見た目は同じですが、「1」の中身は数値ではなく文字列になっています。
最後に数値や文字列でなくても「変数」で指定することも可能です。
(3)第2引数に「変数」を指定する場合
1 2 3 4 5 6 7 8 9 10 11 |
<?php //(3)変数を使う場合 echo '(3)変数に「1」を格納して表示します。<br>'; $num = 1; $num2 = 2; $num3 = 3; echo sprintf('%02d',$num).'<br>'; echo sprintf('%03d',$num2).'<br>'; echo sprintf('%04d',$num3).'<br>'; ?> |
実行結果はこのようになります。
変数に中身を入れて、0埋めで表示されています。
phpではこのように変数に情報を入れてその中身を使用するケースも多くなります。
str_pad関数
str_pad関数でも0埋めが可能です。
基本的な使い方は以下のとおりです。
sprintf関数よりも指定する引数が多い点が異なります。
(例)数値「1」に「0」をつけて「01」と表示する場合
str_pad(1,2,0,STR_PAD_LEFT);
第1引数:表示する数値を指定します。今回は「1」です。
第2引数:表示する桁数を指定します。今回は2桁なので「2」を表示します
第3引数:埋める数値を指定します。今回は0と指定します。
第4引数:左埋め・右埋めを指定できます。今回は数値1の左に0をつけるので
STR_PAD_LEFTと記述します。
右に0をつけて「10」と表示する場合はSTR_PAD_RIGHTと書きます。
str_pad関数もsprintf関数同様に「数値」「文字列」「変数」をそれぞれ引数に指定して実行できます。こちらもサンプルのコードを確認してみましょう。
※すべて第1引数の部分が異なる記述になっています。
(1)数値型
1 2 3 4 5 6 7 8 |
<?php //(1)数値を使う場合 echo '(1)数値の場合<br>'; echo str_pad(1,2,0,STR_PAD_LEFT).'<br>'; echo str_pad(1,3,0,STR_PAD_LEFT).'<br>'; echo str_pad(1,2,0,STR_PAD_RIGHT).'<br>'; echo str_pad(1,3,0,STR_PAD_RIGHT).'<br>'; ?> |
実行結果はこのようになります。
前述のとおり、str_pad関数では右埋めで「10」や「100」といった表記も可能です。その場合、STR_PAD_RIGHTと指定しています。
(2)文字列型
1 2 3 4 5 6 7 8 |
<?php //(2)文字列を使う場合 echo '(2)文字列の場合<br>'; echo str_pad('1',2,0,STR_PAD_LEFT).'<br>'; echo str_pad('1',3,0,STR_PAD_LEFT).'<br>'; echo str_pad('1',2,0,STR_PAD_RIGHT).'<br>'; echo str_pad('1',3,0,STR_PAD_RIGHT).'<br>'; ?> |
実行結果はこのようになります。
(3)変数
1 2 3 4 5 6 7 8 9 10 11 |
<?php echo '(3)変数の場合<br>'; $num = 1; $num2 = 2; echo str_pad($num,2,0,STR_PAD_LEFT).'<br>'; echo str_pad($num2,3,0,STR_PAD_LEFT).'<br>'; echo str_pad($num,2,0,STR_PAD_RIGHT).'<br>'; echo str_pad($num2,3,0,STR_PAD_RIGHT).'<br>'; ?> |
実行結果はこのようになります。
sprintf関数とstr_pad関数でそれぞれ書き方の特徴があることが分かりましたね。
開発するシステムの仕様や運用方法によって適切な方を選択していく必要があります。
まとめ
いかがでしたか?今回はphp言語で0埋めする方法について説明しました。
学び始めた頃は、関数やメソッドは難しく感じることが多くあると思います。実際に数値を入れてみて試すということを繰り返せば使えることができる日が来ると思うので、焦らずにゆっくりと理解を深めていってくださいね。
この記事が、皆様のphpの学習に役立つと幸いです。