PHPで数字を扱う際、桁数を揃えたい場面はよくあります。
例えば、会員番号や注文番号を「00023」のように表示したい場合です。

この記事では、PHPで数字を指定の桁数に揃えてゼロ埋め(0埋め)する方法をわかりやすく解説します。
基本的な方法から応用例まで、サンプルコードと一緒に紹介します。

数字をゼロ埋めにする基本の方法

PHPで数字をゼロ埋めする場合、次の2つの関数を利用できます。

  • sprintf()
  • str_pad()

1. sprintf()を使う方法

sprintf()は、文字列をフォーマットして返す関数です。
数字を指定桁数にゼロ埋めする場合は、%0Ndという書式を使います。

例えば、「sprintf("%02d", "数字");」とすると、指定した数字が2桁にフォーマットされます。
実際に使い方は、こちらのコードを参考にしてください。

<?php
$number = 23;

//5桁にゼロ埋め
$formatted = sprintf("%05d", $number);

echo $formatted; //出力: 00023
?>

  • %05dの意味
    • %:フォーマット開始
    • 0:ゼロ埋め
    • 5:桁数
    • d:整数

2. str_pad()を使う方法

str_pad()は、文字列を指定の長さに揃える関数です。
左側にゼロを埋める場合は、STR_PAD_LEFTを指定します。

<?php
$number = 23;

//5桁にゼロ埋め
$formatted = str_pad($number, 5, "0", STR_PAD_LEFT);

echo $formatted; //出力: 00023
?>

  • 引数の意味
    1. 対象の文字列
    2. 目標の文字数
    3. 埋める文字(今回は “0”)
    4. 埋める方向(左側)

3. どちらを使えばいい?

sprintf()とstr_pad()、どちらの関数を使えば迷った場合は、以下の内容を参考にしてください。

  • sprintf():数値フォーマットが簡単、コードがすっきり
  • str_pad():文字列として柔軟に操作できる

ちなみに、私はsprintf()関数の方が引数も少なく分かりやすいので、よく使っています。
処理速度もsprintf()の方が早いみたいです。
参考:http://php.net/manual/ja/function.str-pad.php

応用編

今回の関数を応用したサンプルコードもいくつか紹介します。
もし使えそうなコードがあれば、自由にコピーしてください。

動的に桁数を指定する

<?php
$number = 42;
$digits = 8;

echo str_pad($number, $digits, "0", STR_PAD_LEFT); //00000042
?>

数字と文字列を組み合わせる

<?php
$prefix = "ID-";
$number = 78;

echo $prefix . sprintf("%04d", $number); //ID-0078
?>

日付や時間

<?php
$hour = 9;
$minute = 5;

echo sprintf("%02d:%02d", $hour, $minute); //09:05
?>

配列やループでまとめてゼロ埋め

<?php
$numbers = [1, 23, 456];

foreach ($numbers as $num) {
echo str_pad($num, 4, "0", STR_PAD_LEFT) . "\n";
}
//出力:
//0001
//0023
//0456
?>

注意点・よくあるミス

今回紹介した関数を使用する場合、次のような点に注意してください。

  1. 文字列に使う場合の挙動
    数値ではなく文字列に対してsprintf("%05d", "23a")を使うと予期しない結果になることがあります。
  2. 指定桁数より長い数字
    例えば、sprintf("%03d", 12345)12345のまま。桁数は切り捨てられません。
  3. 浮動小数点やマイナスの数字
    – 小数点は整数部分だけゼロ埋めされます
    – マイナスの場合、符号も含めて桁数を数えるので注意

まとめ

PHPを使って、数字を指定の桁数にゼロ埋めする場合には、sprintf()str_pad()のいずれかの関数を使用できます。

数字のゼロ埋めは簡単で、見やすさやフォーマットの統一に非常に役立ちます。
PHPを使ってコードを書かれている方は、ぜひ参考にしてください。