数字を0埋め(ゼロパディング)したい時はあるかと思います。
月・日を2桁0埋めしたり、IDを0埋めしたり・・・。
とりあえず「PHP ゼロ埋め」と調べるとPHP公式のstr_pad関数が出てきますが、
今回はあえて使わずにスマートに実装する方法をご紹介します。
とりあえずstr_padで0埋めを実装する
str_pad関数は指定文字で指定文字数分を埋めてくれる役割があります。
だいたいの人はこれでゼロパディングを実装するのではないでしょうか。
str_pad — 文字列を固定長の他の文字列で埋める
第一引数:0埋めの対象となる文字列
第二引数:埋める桁数
第三引数:埋める文字
第四引数:左を埋める場合はSTR_PAD_LEFT、右を埋める場合はSTR_PAD_RIGHT、両側を埋める場合はSTR_PAD_BOTHを指定します。
実際にコードを書くとなると下記のようになります。
echo str_pad(1, 2, 0, STR_PAD_LEFT); // 01 echo str_pad(1, 3, 0, STR_PAD_LEFT); // 001
比較的簡単に利用でき、複数の引数を上手く使えば色々な処理に利用することができますね。
また、0以外の文字列を埋めることもできるのもメリットです。
0埋めをsprintfでスマートに実装する
str_pad関数は汎用的で便利ですが、引数が多いので少し見栄えが悪いです。
HTMLの中でstr_pad(1, 3, 0 ,STR_PAD_LEFT)と書いていくのは見づらくなると思います。
なのでsprintfでスマートに書いてみましょう。
sprintf — フォーマットされた文字列を返す
sprintfは第一引数にフォーマット文字列(変換指定子)を記述し、そのフォーマットに対して第二引数以降を当て込んでいきます。
0埋めを行う場合は「%02d」「%03d」などを使うことで実現ができます。
といった意味になります。
echo sprintf('%02d', 1); // 01 echo sprintf('%03d', 1); // 001 echo sprintf('あなたのIDは%04dです', 1); // あなたのIDは0001です
02、03、04…と数を増やしていくことで0埋めする桁数を指定することができます。
これなら引数は2つで済みますし、コードが短くなります。
フォーマット文字列を上手く使えば「あなたのIDは0001です」のように文の中に入れ込むことができるので可読性も上がるかと思います。
sprintfはかなり汎用的に使えるので是非利用してみてください。
コメント