【PHP入門】sprintf関数の使い方まとめ(0埋め、スペース埋め)

こんにちは!エンジニアのノムラです。

PHPではC言語同様にsprintf関数で指定したフォーマットで文字列を生成することができます。

この記事では、

  • sprintfとは?
  • sprintfの基本的な使い方
  • 型指定子一覧表
  • という基本的な内容から、

  • 0で桁数を揃える方法(0埋め)
  • 空白で桁数を揃える方法
  • などの応用的な使い方に関しても解説していきます。

    今回はsprintfで文字列を生成する方法について、わかりやすく解説します!

    目次

    sprintf関数とは

    指定したフォーマットで文字列を生成するにはsprintf関数を使用します。

    書き方:

    string sprintf( string $フォーマット [, $文字列1 [, $文字列2... ]] );
    

    spritf関数は第一引数に生成する文字列のフォーマットを指定し、第二引数〜より生成する文字列や値を指定します。

    第一引数には、以下のように文字列と型指定子を組み合わせたフォーマットを指定します。

    string sprintf('sprintfのテスト:%s%d', 'AAAA', 5);
    

    この例では文字列で「sprintfのテスト:AAAA5」が生成されます。

    もう迷わない!型指定子一覧

    spritf関数でフォーマットするには型指定子を使います。

    たくさん種類が用意されていて、迷ってしまうこともあると思うので、今回は表にまとめてみました。

    型指定子説明
    %%文字。型指定子の先頭に指定します。
    b2進数の整数。
    cASCII値の文字。
    d10進数の整数。
    e科学記法(例 1.2e+2)。
    E%eと同様だが大文字を指定 (例 1.2E+2)。
    fdouble型の浮動小数点数。
    Ffloat型の浮動小数点数。
    g%eおよび%fの短縮形。
    G%Eおよび%fの短縮形。
    o8進数の整数。
    s文字列。
    u符号無し10進数との整数。
    x16進数(小文字で)の整数。
    X16進数(大文字で)の整数。

    これがあればどの型指定子を使えばいいのか一目瞭然ですね!

    sprintf関数を実践的に使ってみる

    では実際にsprintf関数の使い方を見ていきましょう。

    フォーマットを作成してみる

    以下にsprintf関数を使用したサンプルを紹介します。

    サンプルプログラム1

    <?php
    
    $format = '本日は%d年%d月%d日です。';
    $year = 2017;
    $month = 5;
    $day = 29;
    
    $str = sprintf($format, $year, $month, $day);
    
    echo $str;
    
    ?>
    

    実行結果:

    本日は2017年5月29日です。
    

    サンプルでは生成する文字列のフォーマットで’本日は%d年%d月%d日です。’と、10進数の整数である型指定子%dを3回指定しています。

    第二引数~より指定した数値型の変数が%dの箇所に順番に当てはめられます。

    また、以下のように数値と文字列の型などを組み合わせてフォーマットを指定できます。

    サンプルプログラム2

    <?php
    
    $format = '%sの値段は%d円です。';
    $item = 'apple';
    $val = 100;
    
    $str = sprintf($format, $item, $val);
    
    echo $str;
    
    ?>
    

    実行結果:

    appleの値段は100円です。
    

    0で桁数を揃える(0埋め)

    データを決められた桁数で揃えたいとき、sprintf関数を使用すれば、桁数を0で揃えることができます。

    例えば、以下のように桁数が不揃いなデータがあるとします。

    1111
    22222
    33
    4
    555555

    このようなデータを7桁固定で統一する必要がある場合、sprintfで型指定子d(10進数の整数)を指定すれば桁数を揃えることができます。

    サンプルプログラム1

    echo  sprintf( '%07d', 1111).'<br>';
    echo  sprintf( '%07d', 22222).'<br>';
    echo  sprintf( '%07d', 33).'<br>';
    echo  sprintf( '%07d', 4).'<br>';
    echo  sprintf( '%07d', 555555).'<br>';

    実行結果:

    0001111
    0022222
    0000033
    0000004
    0555555
    

    型指定子%の後にd(10進数の整数)と桁数(表示幅指定子)を指定すれば桁を0埋めできることがわかりますね!

    また、以下のように0(パティング指定子)と桁数(表示幅指定子)を指定することで桁数を調整することもできます。

    サンプルプログラム2

    $str = '1111';
     
    echo  sprintf( "%010s", $str ).'<br>';
    echo  sprintf( "%09s", $str ).'<br>';
    echo  sprintf( "%08s", $str ).'<br>';
    echo  sprintf( "%07s", $str ).'<br>';
    echo  sprintf( "%06s", $str ).'<br>';
    echo  sprintf( "%05s", $str ).'<br>';

    実行結果:

    0000001111
    000001111
    00001111
    0001111
    001111
    01111

    左寄せで0埋めする場合は型指定子%の後に-(マイナス)を指定します。

    以下に左寄せで桁数を揃える方法を記述します。

    サンプルプログラム3

    $str = '1111';
     
    echo  sprintf( "%-010s", $str ).'<br>';
    echo  sprintf( "%-09s", $str ).'<br>';
    echo  sprintf( "%-08s", $str ).'<br>';
    echo  sprintf( "%-07s", $str ).'<br>';
    echo  sprintf( "%-06s", $str ).'<br>';
    echo  sprintf( "%-05s", $str ).'<br>';


    実行結果:

    1111000000
    111100000
    11110000
    1111000
    111100
    11110

    空白で桁数を揃える(スペース埋め)

    sprintf関数を使用すれば、文字列を空白で埋めて揃えることも可能です。

    文字列を空白で埋める場合は、表示幅指定子で空白スペースを埋める桁数を指定します。

    サンプルプログラム

    <?php
    
    $str = 'hello';
    
    echo  sprintf( "%10s", $str );
    
    ?>
    

    実行結果:

         hello
    

    サンプルでは桁数を10で指定していますので、文字列’hello’の5桁の前に空白5桁が付加されることになります。

    まとめ

    ここでは、指定したフォーマットで文字列を生成するsprintfについて、基本的な使い方から

    0埋めで桁数を揃える方法、
    スペース埋めで空白で埋める方法

    などについて解説しました。

    sprintf関数を使用して、文字列を指定したフォーマットで生成することはよくありますので、この機会にぜひ覚えておきましょう。

    もしsprintf関数の使い方を忘れてしまったら、この記事を思い出してくださいね。

    この記事を書いた人

    【プロフィール】
    DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
    累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
    【専門分野】
    IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

    目次