[php] printf sprintf vprintf vsprintf の違いについて(その2)
- 2019年12月05日
- 技術情報
PHPでフォーマットした文字列の出力をおこなう際に使用する関数、
printf sprintf vprintf vsprintf の使い分けについて記載します。
今回は「sprintf」および「vsprintf」の使用方法を紹介します。
「printf」「sprintf」の使用方法は前回の記事をご参照ください。
sprintfの使用方法の例:
sprintfはprintfによく似ていますが、
printf はフォーマット済みの文字列を出力するのに対して、
sprintf はフォーマットされた文字列を返します。
sprintf単体では出力しませんので、以下のサンプルでは
sprintfから受け取った文字列をechoで出力をおこなっています。
$format = "名前は、%sで、年齢は%dです。<br/>";
$hoge1 = sprintf($format, "山田太郎", 30);
$hoge2 = sprintf($format, "大阪花子", 20);
echo $hoge1;
echo $hoge2;
上記の出力結果:
名前は、山田太郎で、年齢は30です。
名前は、大阪花子で、年齢は20です。
また引数で受け取った値をフォーマット出力する文字列内に複数使用する場合、
引数の番号を指定して複数回使い回すことも可能です。
その場合は以下のように記述します。
$age = 50;
$name = '山田';
$format = '名前は %2$s です。年齢は %1$d です。<br />
年齢は %1$dの %2$s です。';
echo sprintf($format, $age, $name);
上記の出力結果:
名前は 山田 です。年齢は 50 です。
年齢は 50の 山田 です。
vsprintfの使用方法の例:
vsprintf は、sprintf と動作は同じですが、
可変長の引数ではなく配列が引数になります。
以下のように使用します。
$array1 = array("山田太郎", 30);
$array2 = array("大阪花子", 20);
$format = "名前は、%sで、年齢は%dです。<br/>";
$hoge1 = vsprintf($format, $array1);
$hoge2 = vsprintf($format, $array2);
echo $hoge1;
echo $hoge2;
上記の出力結果:
名前は、山田太郎で、年齢は30です。
名前は、大阪花子で、年齢は20です。
こちらもvsprintfで受け取った配列の引数を複数回使用する場合、
引数の番号を指定して使い回すことも可能です。
$array1 = array(30,"山田太郎");
$array2 = array(20,"大阪花子");
$format = '名前は %2$s です。年齢は %1$d です。<br />
年齢は %1$dの %2$s です。<br />';
$hoge1 = vsprintf($format, $array1);
$hoge2 = vsprintf($format, $array2);
echo $hoge1;
echo $hoge2;
上記の実行結果:
名前は 山田太郎 です。年齢は 30 です。
年齢は 30の 山田太郎 です。
名前は 大阪花子 です。年齢は 20 です。
年齢は 20の 大阪花子 です。
木曜日担当:nishida
nishida at 2019年12月05日 10:00:45