文字列関数
| 解説 | フォーマットされた文字列を取得する |
|---|---|
| 書式 | string sprintf( string format [, mixed args ] ) |
string sprintf( string 書式 [, mixed フォーマット部分に出 ] ) |
|
| 引数 |
format
フォーマットする書式
|
args
フォーマット部分と変換して出力する値
|
|
| 返値 | フォーマットされた文字列 |
sprintf()は、引数をフォーマットしてから出力します。第1引数で指定したフォーマット文字列のフォーマット部分(指定子で指定する)に第2引数(以降)で指定した値を当てはめて出力します。
format
書式
フォーマット文字の指定子を使って、出力フォーマットを指定します。フォーマット文字以外の文字列があった場合はそのまま出力されます。
フォーマット文字が複数ある場合は、1つ目のフォーマットが第2引数、2つ目のフォーマットが第3引数・・・・・というように順番に交換されます。
フォーマット文字列は、0個以上のディレクティブによって構成されます。 ディレクティブにはそのまま結果にそのまま渡される通常の文字(%を除く)と指定子とがあります。各指定子は「%」の後に左の表の要素を1つ以上付けなくてはなりません。
args
フォーマット部分に出
フォーマット文字一覧
printf()やsprintf()で使用できるフォーマット文字の一覧です。
| 要素番号 | 指定子 | 説明 | 指定できる値 | デフォルト | |
|---|---|---|---|---|---|
| 1 | パディング指定子 | 幅の余りを埋める文字を指定 | 空白もしくは0 | 空白 | |
| 2 | アラインメント指定子 | 右寄せまたは左寄せ | "-"で左寄せ | 右寄せ | |
| 3 | 表示幅指定子 | 結果を最低何桁にするか | ---------- | ---- | |
| 4 | 精度指定子 | 小数点以下何桁まで表示するか | ---------- | ---- | |
| 5 | 型指定子 | 型を指定 | % | パーセント文字。引数は不要 | ---- |
| b | 引数を整数として扱い、バイナリの数値として表現。 | ||||
| c | 引数を整数として扱い、そのASCII値の文字として表現 | ||||
| d | 引数を整数として扱い、10進数として表現 | ||||
| u | 引数を整数として扱い、符号なしの10進数として表現 | ||||
| f | 引数をdoubleとして扱い、不動小数点数として表現 | ||||
| o | 引数を整数として扱い、8進数として表現 | ||||
| s | 引数を文字列として扱い、表現 | ||||
| x | 引数を整数として扱い、16進数の小文字で表現 | ||||
| X | 引数を整数として扱い、16進数の大文字で表現 | ||||
型指定子以外は省略可能ですが、要素番号順に記述しなければならないので注意して下さい。
printf()ではフォーマットした文字を出力してしまいますが、出力しないでフォーマットだけ行いたい時にはsprintf()などを使います。
サンプルスクリプト
簡単な利用例
<?php
//フォーマット部分(ここでは%d)が2つ目の引数と交換されて出力されます。
$score = 95;
printf( "得点は%d点です", $score );
?>
出力結果
得点は95点です
値が複数ある場合の処理
<?php
$year = 2004;
$month = 5;
$day = 4;
//「2004年05月04日」と出力したい
printf("今日は%04d年%02d月%02d日です。", $year, $month, $day );
?>
出力結果
今日は2004年05月04日です。
引数の番号付け(PHP4.0.6以降対応)
<?php
$year = 2004;
$month = 5;
$day = 15;
$format = "日本語では%04d年%02d月%02d日<br />";
printf($format, $year, $month, $day);
// 値が複数ある場合、引数が順番で並んでいるとは限らない。
// そこで引数に番号をつけて順番を指定してみる。
// %の後に何番目の引数と交換するかを指定する。
// この場合は「%引数番号」の後に「$」を付けて実際のフォーマット指定をする
$month = "May"; // 月$monthの定義しなおし
//「"」ダブルクォーテーションの文字列なので「$」をエスケープしている。
$format = "英語なら・・・・%2\$s %3\$02d %1\$04d";
printf($format, $year, $month, $day);
?>
出力結果
日本語では2004年05月15日
英語なら・・・・May 15 2004
英語なら・・・・May 15 2004


