【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関数の使い方を忘れてしまったら、この記事を思い出してくださいね。

    この記事を書いた人

    WEBエンジニアをやっています。
    プログラミング初心者にもわかりやすく解説ができるよう頑張ります。

    目次