PHPプログラミング

最終更新日:
公開日:

レシピ

文字列

数字を指定した桁数まで0埋めする

数字を指定した桁数になるまで「0」で埋める方法について解説します。

この記事のポイント

  • 指定した桁数まで0埋めする方法はsprintf関数を使う方法とstr_pad関数を使う方法の2種類
  • 0以外の文字で埋めることもできる

目次

数字を0埋めした桁数にする

PHPで数字を扱うときに、0埋めして桁数を揃える方法を解説します。

以下の例ではパターン1ではsprintf関数を使う方法、パターン2はstr_pad関数を使う方法になります。
いずれも指定した桁数まで0で埋めた数字を取得できるため、使いやすい方法を選択してください。

また、0埋めした後の値の型については数値(int)のままでは0埋めできないため、いずれの方法も文字列(string)に変換します。

パターン1:sprintf関数を使って0埋めする

パターン1はsprintf関数を使う方法です。
他のプログラミング言語でもsprintf関数が用意されていることが多いため、こちらの関数の方が馴染みのある方も多いかもしれません。

sprintf関数は第1パラメータに変換後のフォーマット、第2パラメータに0埋めする数値を指定します。

フォーマットの指定では、例えば5桁の0埋めした数字にしたい場合は「%05d」のように指定します。
%の後ろの0は桁を埋めるときに使う文字、そして5は文字数(桁数)の指定になります。
最後のdは10進数表記の指定です。

以下のコード例では数値を10桁にして0埋めします。

コード例

<?php

// (1)0埋めする数値
$number1 = 12;
$number2 = 12345;
$number3 = 12345678;
$number4 = 123456789012345;

// (2)0埋めした文字を入れる変数
$res1 = null;
$res2 = null;
$res3 = null;
$res4 = null;

// (3)0埋めする前の数値を出力
var_dump($number1); // int(12)
var_dump($number2); // int(12345)
var_dump($number3); // int(12345678)
var_dump($number4); // int(123456789012345)

// (4)0埋め
$res1 = sprintf('%010d', $number1);
$res2 = sprintf('%010d', $number2);
$res3 = sprintf('%010d', $number3);
$res4 = sprintf('%010d', $number4);

// (5)0埋めした後の数値(文字列)を出力
var_dump($res1); // string(10) "0000000012"
var_dump($res2); // string(10) "0000012345"
var_dump($res3); // string(10) "0012345678"
var_dump($res4); // string(15) "123456789012345"

変数$number4のように指定した桁数以上の値が入っているときは、桁数を下げたりせずにそのまま文字列として出力されます。

パターン2:str_pad関数を使って0埋めする

パターン2はstr_pad関数を使う方法です。

str_pad関数は4つのパラメータを指定します。
第1パラメータに0埋めする数値、第2パラメータは桁数、第3パラメータは埋めるときに使う文字、第4パラメータに埋める位置を指定します。

例えば5桁の0埋めした数字にしたい場合は「str_pad( $number, 5, '0', STR_PAD_LEFT」のように指定します。
第4パラメータの埋める位置の指定では以下の3種類の定数から指定し、省略した場合はSTR_PAD_RIGHTの指定になります。

定数埋める位置
STR_PAD_RIGHT右側(左揃え)
STR_PAD_LEFT左側(右揃え)
STR_PAD_BOTH両脇(中央揃え)

以下のコード例では数値を10桁にして0埋めします。

コード例

<?php

// (1)0埋めする数値
$number1 = 12;
$number2 = 12345;
$number3 = 12345678;
$number4 = 123456789012345;

// (2)0埋めした文字を入れる変数
$res1 = null;
$res2 = null;
$res3 = null;
$res4 = null;

// (3)0埋めする前の数値を出力
var_dump($number1); // int(12)
var_dump($number2); // int(12345)
var_dump($number3); // int(12345678)
var_dump($number4); // int(123456789012345)

// (4)0埋め
$res1 = str_pad( $number1, 10, 0, STR_PAD_LEFT);
$res2 = str_pad( $number2, 10, 0, STR_PAD_LEFT);
$res3 = str_pad( $number3, 10, 0, STR_PAD_LEFT);
$res4 = str_pad( $number4, 10, 0, STR_PAD_LEFT);

// (5)0埋めした後の数値(文字列)を出力
var_dump($res1); // string(10) "0000000012"
var_dump($res2); // string(10) "0000012345"
var_dump($res3); // string(10) "0012345678"
var_dump($res4); // string(15) "123456789012345"

出力結果はsprintf関数と同じ内容になります。

0以外の文字で埋める

str_pad関数を使う方法では、第3パラメータに0以外の文字を指定することで任意の文字で桁数を埋めることができます。
以下の例では「*」で10桁になるまで埋めます。

コード例

<?php

// (1)0埋めする数値
$number1 = 12;
$number2 = 12345;
$number3 = 12345678;
$number4 = 123456789012345;

// (2)0埋めした文字を入れる変数
$res1 = null;
$res2 = null;
$res3 = null;
$res4 = null;

// (3)0埋めする前の数値を出力
var_dump($number1); // int(12)
var_dump($number2); // int(12345)
var_dump($number3); // int(12345678)
var_dump($number4); // int(123456789012345)

// (4)指定した文字でスペースを埋める(右揃え)
$res1 = str_pad( $number1, 10, '*', STR_PAD_LEFT);
$res2 = str_pad( $number2, 10, '*', STR_PAD_LEFT);
$res3 = str_pad( $number3, 10, '*', STR_PAD_LEFT);
$res4 = str_pad( $number4, 10, '*', STR_PAD_LEFT);

// (5)出力
var_dump($res1); // string(10) "********12"
var_dump($res2); // string(10) "*****12345"
var_dump($res3); // string(10) "**12345678"
var_dump($res4); // string(15) "123456789012345"

// (6)指定した文字でスペースを埋める(左揃え)
$res1 = str_pad( $number1, 10, '*', STR_PAD_RIGHT);
$res2 = str_pad( $number2, 10, '*', STR_PAD_RIGHT);
$res3 = str_pad( $number3, 10, '*', STR_PAD_RIGHT);
$res4 = str_pad( $number4, 10, '*', STR_PAD_RIGHT);

// (7)出力
var_dump($res1); // string(10) "12********"
var_dump($res2); // string(10) "12345*****"
var_dump($res3); // string(10) "12345678**"
var_dump($res4); // string(15) "123456789012345"

// (8)指定した文字でスペースを埋める(中央揃え)
$res1 = str_pad( $number1, 10, '*', STR_PAD_BOTH);
$res2 = str_pad( $number2, 10, '*', STR_PAD_BOTH);
$res3 = str_pad( $number3, 10, '*', STR_PAD_BOTH);
$res4 = str_pad( $number4, 10, '*', STR_PAD_BOTH);

// (9)出力
var_dump($res1); // string(10) "****12****"
var_dump($res2); // string(10) "**12345***"
var_dump($res3); // string(10) "*12345678*"
var_dump($res4); // string(15) "123456789012345"

以上、指定した桁数まで数字を0埋めする方法についてでした。