printf()やsprintf()と指示子

プログラミングで何かを出力するには、
print()関数や(PHPでは)echoを使ったりするけれど、
printf()やsprintf() を使うこともよくあって、これがまた便利。
しかし、その扱い方をよく忘れてしまうのでメモっときます。

printf() : フォーマット済みの文字列を出力する関数
sprintf() : フォーマットされた文字列に値を返す関数

【参考サイト】
●printf() 
 http://php.net/manual/ja/function.printf.php
●sprintf()
 http://php.net/manual/ja/function.sprintf.php

この printf関数や sprintf関数を説明するときに、まず耳にするのが
「フォーマット済み(フォーマットされた)の文字列って何?」という質問。

まずはこの「フォーマット・・・」ってヤツから。
例えば、問い合わせフォームを利用すると、自動で問い合わせ内容の確認メールが届くことがよくありますよね。

(例)●●様 いつも▲▲をご利用いただき有難うございます。

これは予め決まった返信文を用意しておいて、その文中の特定位置(●●や▲▲のとこ)に自動で文字を差込んで送るプログラムになってます。
このような特定の位置に自動で文字を差し込むようになっている文書のことを「フォーマットされた文字列」と言います。

上記(例)のように、特定の位置へ文字を差し込む場合は、

(PHP記述例)
 $format = “%s様 いつも%sをご利用いただき有難うございます。”;

という風に「フォーマットされた文字列」を用意します。
この時、差込位置を指定している「%s」をディレクティブ(指示子)と言い、PHPでは指示子の始めに必ず「%」をつけて、差込む値の型式によって「d」とか「s」とかを指定します。

※指示子の種類は下記の表を参照

%d 10進数(数値)
%u 符号無し10進数
%o 符号無し8進数
%x 符号無し16進数
%X 符号無し16進数(大文字表記)
%e 指数形式の浮動小数点
%E %eと同じ(大文字表記)
%f 固定小数点形式の浮動小数点
%g %eまたは%fと同じ
%G %eまたは%fと同じ(大文字表記)
%b 符号無し2進数
%c 指定した文字コードに対応した文字
%s 文字列
%p 値のポインタ
%n 文字数を指定した変数に格納
%% %の文字そのもの、「\(エスケープシーケンス)」と同じ扱い)

そして、出力指定でprintf()やsprintf()を使う。

(printfを使ったPHP記述例)
 printf($format, “鈴木”, “仮想ショップ”);

(sprintfを使ったPHP記述例)
 echo sprintf($format, “鈴木”, “仮想ショップ”);

(実行結果)
 鈴木様 いつも仮想ショップをご利用いただき有難うございます。

上記例の出力結果はどちらも同じ。

printf()だとそのまま出力されるけど、
sprintf()では差込みしか行われないので、出力するにはechoなどの出力指定を付け加える。
sprintf()はデータベース等への書き出しを行う場合に使うのが基本なので、出力するならprintf()を使うのが一般的。

実行サンプルはこちら

私の中では、いつまで経っても憶えられない関数の代表格ですね・・・これが。