PHP sprintf で文字列をフォーマット化する

例えば、『3:みかん』というような書き方をしたいとき下記のように、 ドットで繋ぐ方法もありますが、長くなると分かりにくくなります。

echo $int . '番目:' . $string . PHP_EOL;

sprintf()を使って『◯番目:xxx』というフォーマットにすることができます。

$fruit = ['りんご','みかん','バナナ'];

for($i = 1; $i <= count($fruit); $i++){
    
    echo sprintf("%d番目:%s", $i, $fruit[$i-1]) . PHP_EOL;
}

//1番目:りんご
//2番目:みかん
//3番目:バナナ

sprintf — フォーマットされた文字列を返す

指定子を使って引数を当てはめます。

  • % : 指定子を使う直前に記述
  • d : 引数は整数として扱われ、(符号付き)10進数値として表現されます。
  • s : 引数は文字列として扱われ、文字列として表現されます。

その他は下記を参照。

PHP: sprintf - Manual

例えば、こんな文字列の生成も可能です。 『〇〇に■匹の猿がいます。』

$num = 3;
$location = "動物園";

$format = '%2$s に %1$d 匹の猿がいます。';
echo sprintf($format, $num, $location);

ここで注意したいのは、sprintfの中のコード(引数)と順番が一致していないので、 フォーマット文字列のほうで指示を行う方が望ましいでしょう。

『sprintf($format, $num, $location)』$locationの方を先に使う場合 『%2$s に %1$d 匹の猿がいます。』と$format内で順番指定しましょう。