PHPで「0埋め」とは、数値や文字列の桁数をそろえるために、足りない部分へ 0 を追加する処理のことです。
たとえば、次のように1桁や2桁の数字を3桁にそろえる場合に使います。
1 → 001
12 → 012
123 → 123
会員番号、注文番号、商品コード、請求書番号、ファイル名の連番など、実務でもよく使われる処理です。
PHPで0埋めを行う方法はいくつかありますが、代表的なのは次の2つです。
str_pad()
sprintf()
基本的には、会員番号や商品コードのような「コード系の値」には str_pad()、数値を表示用に整形したい場合には sprintf() を使うとわかりやすいです。
str_pad()で0埋めする方法
str_pad() は、指定した長さになるように文字列を埋めるための関数です。
左側・右側・両側のどこに文字を追加するかを指定できます。
str_pad()の基本構文
str_pad(対象の文字列, 桁数, 埋める文字, 埋める方向)
たとえば、数値の左側に0を追加して3桁にしたい場合は、次のように書きます。
$num = 7;
$result = str_pad((string)$num, 3, '0', STR_PAD_LEFT);
echo $result;
出力結果は次のとおりです。
007
7 を3桁にそろえるため、左側に 0 が2つ追加されています。
str_pad() の第1引数は文字列として扱うため、数値を渡す場合は (string) を付けておくと意図が明確になります。
左側を0埋めする
0埋めでは、左側に0を追加するケースがもっとも一般的です。
echo str_pad((string)1, 3, '0', STR_PAD_LEFT); // 001
echo str_pad((string)12, 3, '0', STR_PAD_LEFT); // 012
echo str_pad((string)123, 3, '0', STR_PAD_LEFT); // 123
すでに指定した桁数に達している場合は、0は追加されません。
echo str_pad((string)1234, 3, '0', STR_PAD_LEFT);
出力結果は次のようになります。
1234
3桁を指定していても、元の値が4桁の場合は切り捨てられません。
右側を0埋めする
STR_PAD_RIGHT を指定すると、右側に0を追加できます。
$value = '12';
echo str_pad($value, 5, '0', STR_PAD_RIGHT);
出力結果は次のとおりです。
12000
ただし、会員番号や注文番号のようなID・コード系の値では、左側に0を入れるケースが一般的です。
両側を0埋めする
STR_PAD_BOTH を指定すると、左右に分けて0を追加できます。
$value = 'A';
echo str_pad($value, 5, '0', STR_PAD_BOTH);
出力結果は次のようになります。
00A00
ただし、実務で0埋めを行う場合、両側に0を追加するケースはあまり多くありません。
sprintf()で0埋めする方法
数値を指定した桁数で表示したい場合は、sprintf() を使う方法もあります。
sprintf() は、指定したフォーマットに従って文字列を作成する関数です。
sprintf()の基本例
$num = 7;
$result = sprintf('%03d', $num);
echo $result;
出力結果は次のとおりです。
007
%03d は、整数を3桁にそろえ、足りない部分を0で埋める指定です。
%03dの意味
%03d の意味は、次のようになります。
% フォーマット指定の開始
0 空白ではなく0で埋める
3 全体を最低3桁分の幅にする
d 整数として扱う
たとえば、桁数を変えると次のようになります。
$num = 25;
echo sprintf('%03d', $num); // 025
echo sprintf('%05d', $num); // 00025
echo sprintf('%08d', $num); // 00000025
指定桁数より長い場合は切り捨てられない
sprintf() の桁数指定は、「最低限確保する幅」を表します。
そのため、指定した桁数より元の数値が長い場合でも、切り捨てられるわけではありません。
echo sprintf('%03d', 1234);
出力結果は次のようになります。
1234
%03d は「3桁に切り詰める」という意味ではなく、「最低3桁になるように足りない部分を0で埋める」という意味です。
小数には%dではなく%fを使う
%03d の d は整数用です。
小数を扱いたい場合は、%f を使います。
$price = 7.8;
echo sprintf('%.2f', $price);
出力結果は次のとおりです。
7.80
小数点以下を2桁にそろえたい場合は、%.2f のように指定します。
整数部分も含めて幅をそろえたい場合は、次のように書けます。
$price = 7.8;
echo sprintf('%06.2f', $price);
出力結果は次のようになります。
007.80
printf()で0埋めして表示する方法
sprintf() と似た関数に printf() があります。
違いは、sprintf() はフォーマットした結果を文字列として返すのに対し、printf() はその場で表示する点です。
printf()の基本例
$num = 7;
printf('%03d', $num);
出力結果は次のとおりです。
007
sprintf()とprintf()の違い
後で変数に入れて使いたい場合は sprintf()、そのまま画面に出力するだけなら printf() を使います。
$num = 7;
$result = sprintf('%03d', $num); // 文字列として取得
printf('%03d', $num); // その場で表示
実務では、変数に代入してから別の処理に使うことも多いため、sprintf() の方が使いやすい場面が多いです。
number_format()で小数点以下をそろえる方法
number_format() は、数値をカンマ区切りにしたり、小数点以下の桁数をそろえたりするための関数です。
整数部分を 0012 のように0埋めする用途には基本的に向いていません。
カンマ区切りにする
$num = 1234;
echo number_format($num);
出力結果は次のとおりです。
1,234
小数点以下を2桁にする
$num = 12.5;
echo number_format($num, 2);
出力結果は次のようになります。
12.50
金額表示などでは便利です。
$price = 1234.5;
echo number_format($price, 2);
出力結果は次のとおりです。
1,234.50
number_format()は丸めが発生する
number_format() は、小数点以下の桁数を指定すると、必要に応じて丸めが行われます。
echo number_format(12.345, 2);
出力結果は次のようになります。
12.35
単に末尾に0を追加するだけではなく、指定した小数桁数に合わせて数値が丸められる点に注意してください。
日付の月・日を0埋めする方法
日付の月や日を2桁にそろえたい場合にも、0埋めはよく使われます。
たとえば、7月5日 を 07月05日 のように表示したい場合です。
str_pad()で月・日を0埋めする
$month = 7;
$day = 5;
echo str_pad((string)$month, 2, '0', STR_PAD_LEFT);
echo str_pad((string)$day, 2, '0', STR_PAD_LEFT);
出力結果は次のようになります。
0705
月と日を区切って表示したい場合は、次のように書けます。
$month = 7;
$day = 5;
echo str_pad((string)$month, 2, '0', STR_PAD_LEFT) . '月';
echo str_pad((string)$day, 2, '0', STR_PAD_LEFT) . '日';
出力結果は次のとおりです。
07月05日
date()で月・日を2桁表示する
日付を扱う場合は、str_pad() よりも date() を使う方が自然です。
echo date('Y-m-d');
出力例は次のようになります。
2026-07-05
date() のフォーマットでは、m が2桁の月、d が2桁の日を表します。
echo date('m'); // 01〜12
echo date('d'); // 01〜31
タイムゾーンによって日付が変わることがあるため、必要に応じてタイムゾーンを明示しておくと安心です。
date_default_timezone_set('Asia/Tokyo');
echo date('Y-m-d');
実務でよく使う0埋めの例
PHPの0埋めは、実務ではIDや番号の表示によく使います。
会員番号を6桁にする
$userId = 128;
$userCode = str_pad((string)$userId, 6, '0', STR_PAD_LEFT);
echo $userCode;
出力結果は次のとおりです。
000128
接頭辞を付けたい場合は、次のように書けます。
$userId = 128;
$userCode = 'USER' . str_pad((string)$userId, 6, '0', STR_PAD_LEFT);
echo $userCode;
出力結果は次のようになります。
USER000128
注文番号を8桁にする
$orderId = 123;
$orderNo = str_pad((string)$orderId, 8, '0', STR_PAD_LEFT);
echo $orderNo;
出力結果は次のとおりです。
00000123
請求書番号を作る
$invoiceId = 42;
$invoiceNo = 'INV-' . str_pad((string)$invoiceId, 6, '0', STR_PAD_LEFT);
echo $invoiceNo;
出力結果は次のようになります。
INV-000042
ファイル名に連番を付ける
$i = 5;
$fileName = 'image_' . str_pad((string)$i, 3, '0', STR_PAD_LEFT) . '.jpg';
echo $fileName;
出力結果は次のとおりです。
image_005.jpg
画像ファイルやCSVファイルなどを連番で管理するときに便利です。
str_pad()とsprintf()の使い分け
PHPで0埋めをするときは、str_pad() と sprintf() のどちらを使うべきか迷うことがあります。
基本的には、次のように使い分けるとよいです。
コード系の値にはstr_pad()
会員番号、注文番号、商品コード、請求書番号などは、数値ではなく「コード」として扱うのが自然です。
このような場合は、str_pad() が向いています。
$id = 123;
$code = str_pad((string)$id, 6, '0', STR_PAD_LEFT);
echo $code; // 000123
コードとして扱う値は、計算するための数値ではなく、表示や識別のための文字列です。
そのため、0埋め後の値は文字列として扱うのが基本です。
数値表示にはsprintf()
整数を指定桁数で表示したい場合は、sprintf() が便利です。
$num = 89;
echo sprintf('%05d', $num);
出力結果は次のとおりです。
00089
数値をフォーマットして表示したい場合には、sprintf() を使うと簡潔に書けます。
0埋めした値を扱うときの注意点
0埋めは簡単に実装できますが、実務ではいくつか注意点があります。
0埋めした値は文字列として扱う
0埋めした値は、基本的に文字列として扱います。
$code = str_pad((string)7, 3, '0', STR_PAD_LEFT);
echo $code; // 007
この 007 を数値として扱うと、先頭の0は消えてしまいます。
$code = '007';
echo (int)$code;
出力結果は次のようになります。
7
会員番号や商品コードのように先頭の0に意味がある場合は、数値ではなく文字列として扱うようにしましょう。
データベースに保存するときは型に注意する
データベースに 000123 のような値を保存したい場合、カラムの型が INT だと先頭の0は保持されません。
000123 → 123
先頭の0を含めた状態で保存したい場合は、VARCHAR などの文字列型を使います。
member_code VARCHAR(10)
ただし、実務では次のように設計することも多いです。
$id = 123;
$displayId = str_pad((string)$id, 6, '0', STR_PAD_LEFT);
echo $displayId; // 000123
この場合、データベースには数値IDとして 123 を保存し、画面表示や帳票出力のときだけ 000123 に変換します。
どちらがよいかは、0埋めされた値を「保存すべきコード」として扱うのか、「表示用の形式」として扱うのかによって変わります。
マイナス値の0埋めに注意する
sprintf() でマイナス値を0埋めすると、符号も含めて桁数が処理されます。
$num = -7;
echo sprintf('%03d', $num);
出力結果は次のとおりです。
-07
さらに桁数を増やすと、次のようになります。
echo sprintf('%05d', -7);
出力結果は次のとおりです。
-0007
マイナス値を会員番号や注文番号として使うことは少ないですが、金額の差分や在庫差分などを表示するときは注意しましょう。
日本語などのマルチバイト文字には注意する
str_pad() は、会員番号や商品コードのような半角英数字の0埋めに向いています。
一方で、日本語などのマルチバイト文字を含む文字列の見た目の幅をそろえる用途では注意が必要です。
echo str_pad('あ', 5, '0', STR_PAD_LEFT);
半角数字や半角英字だけを0埋めする場合は問題になりにくいですが、日本語文字列の表示幅をきれいに揃えたい場合は、別の方法を検討した方がよいケースがあります。
PHPの0埋めでよくある使い分け
用途ごとのおすすめは、次のとおりです。
| 用途 | おすすめの方法 | 例 |
|---|---|---|
会員番号を 000123 のようにしたい | str_pad() | str_pad((string)$id, 6, '0', STR_PAD_LEFT) |
| 注文番号・商品コードを作りたい | str_pad() | 'ORD-' . str_pad((string)$id, 8, '0', STR_PAD_LEFT) |
| 整数を3桁で表示したい | sprintf() | sprintf('%03d', $num) |
| 画面に直接表示したい | printf() | printf('%03d', $num) |
| 小数点以下を2桁にしたい | sprintf() | sprintf('%.2f', $price) |
| カンマ区切りの金額にしたい | number_format() | number_format($price) |
| 月・日を2桁で表示したい | date() | date('m'), date('d') |
| 先頭0込みでDBに保存したい | VARCHAR | member_code VARCHAR(10) |
PHPの0埋めはstr_pad()とsprintf()を覚えれば十分
PHPで0埋めをする場合、まず覚えておきたいのは str_pad() と sprintf() です。
会員番号、注文番号、商品コードなど、文字列として扱う値を0埋めするなら str_pad() が便利です。
echo str_pad((string)7, 3, '0', STR_PAD_LEFT);
出力結果は次のとおりです。
007
整数を指定桁数で表示したい場合は、sprintf() が便利です。
echo sprintf('%03d', 7);
出力結果は次のとおりです。
007
実務では、先頭の0に意味がある値は数値ではなく文字列として扱うことが重要です。
特に、会員番号や商品コードをデータベースに保存する場合は、INT にすると先頭の0が消えてしまいます。
0埋めした値をそのまま保存したい場合は VARCHAR を使い、表示時だけ0埋めすればよい場合は、元のIDは数値のまま保存して、画面表示時に str_pad() や sprintf() で整形するとよいでしょう。
以上、PHPの0埋めをする方法についてでした。
最後までお読みいただき、ありがとうございました。










