こんにちは!エンジニアのノムラです。
PHPではC言語同様にsprintf関数で指定したフォーマットで文字列を生成することができます。
この記事では、
という基本的な内容から、
などの応用的な使い方に関しても解説していきます。
今回はsprintfで文字列を生成する方法について、わかりやすく解説します!
sprintf関数とは
指定したフォーマットで文字列を生成するにはsprintf関数を使用します。
書き方:
string sprintf( string $フォーマット [, $文字列1 [, $文字列2... ]] );
spritf関数は第一引数に生成する文字列のフォーマットを指定し、第二引数〜より生成する文字列や値を指定します。
第一引数には、以下のように文字列と型指定子を組み合わせたフォーマットを指定します。
string sprintf('sprintfのテスト:%s%d', 'AAAA', 5);
この例では文字列で「sprintfのテスト:AAAA5」が生成されます。
もう迷わない!型指定子一覧
spritf関数でフォーマットするには型指定子を使います。
たくさん種類が用意されていて、迷ってしまうこともあると思うので、今回は表にまとめてみました。
型指定子 | 説明 |
---|---|
% | %文字。型指定子の先頭に指定します。 |
b | 2進数の整数。 |
c | ASCII値の文字。 |
d | 10進数の整数。 |
e | 科学記法(例 1.2e+2)。 |
E | %eと同様だが大文字を指定 (例 1.2E+2)。 |
f | double型の浮動小数点数。 |
F | float型の浮動小数点数。 |
g | %eおよび%fの短縮形。 |
G | %Eおよび%fの短縮形。 |
o | 8進数の整数。 |
s | 文字列。 |
u | 符号無し10進数との整数。 |
x | 16進数(小文字で)の整数。 |
X | 16進数(大文字で)の整数。 |
これがあればどの型指定子を使えばいいのか一目瞭然ですね!
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関数の使い方を忘れてしまったら、この記事を思い出してくださいね。