vfprintf( resource $handle, string $format, array $args )
は、フォーマットに基づき生成した文字列を、ファイルに書き込む組み込み関数。
fprintf関数と似ているが、フォーマットしたいデータを、可変長引数ではなく、配列で指定する点が異なる。
定義
パラメータ
- リソース型 $handle
ファイルハンドル。
- 文字列型 $format
フォーマット。
- 配列型 $args
オプション。
フォーマットしたいデータを格納した配列。
フォーマット
%
の後に、空白は入れずに、指定子を続けて記述する。
- 位置指定子
オプション。
フォーマットしたいデータが複数あり、順番を入れ替えたい場合に使う。
n番目のデータを、
n$
とする。1番目のデータは、1$
。5番目のデータは、5$
となる。- 変換指定子
下記の変換指定子を、1つ以上続けて記述する。
- 符号指定子
オプション。
何も指定しないと、負の数にだけ、符号を付ける。正の数には、プラス符号「+」を付けない。負の数には、マイナス符号「-」を付ける。
+
を指定すると、正の数にも、符号を付ける。正の数には、プラス符号「+」を付け、負の数には、マイナス符号「-」を付ける。- パディング指定子
オプション。
「表示幅指定子」に指定した長さになるまで、どんな文字で埋めるかを指定する。
- 半角空白: 半角空白で埋める。初期設定値。
- 0:
0
で埋める。ゼロパディング。 '任意の一文字
: 単一引用符'
に続く「任意の一文字」で埋める。
- アラインメント指定子
オプション。
左寄せか、右寄せかを指定する。
初期設定値は、右寄せ。
-
を指定すると、左寄せ。- 表示幅指定子
オプション。
最低何桁にするかを、数字で指定。
- 精度指定子
オプション。
数字で指定。
浮動小数点数の場合、小数点以下の小数部を、「精度指定子」に指定した数の位まで表示する。
文字列の場合、「精度指定子」に指定した文字数を超える文字を切り捨てる。
- 型指定子
オプション。
引数の「多様な型 $args」や「多様な型 $…」を、何のデータ型で扱うかを指定する。
- %: パーセント記号。
- b: 引数を整数として扱い、2進数に変換。
- c: 引数を整数として扱い、ASCII値の文字として表現。
- d: 引数を整数として扱い、10進数に変換。
- e: 引数を科学記法として扱う。小文字を使う。
- E: 引数を科学記法として扱う。大文字を使う。
- u: 引数を整数として扱い、符号がない10進数に変換。
- f: 引数をdoubleとして扱い、浮動小数点数として表現。
- F: 引数をfloatとして扱い、浮動小数点数として表現。
- g: %e および %f の短縮形。
- G: %E および %f の短縮形。
- o: 引数を整数として扱い、 8進数に変換。
- s: 引数を文字列として扱う。
- x: 引数を整数として扱い、16進数(小文字)に変換。
- X: 引数を整数として扱い、16進数(大文字)に変換。
構文
フォーマット済み文字列をファイルに書き込む
「フォーマット」に基づき生成した文字列を、ファイルに書き込む。
戻り値
ファイルに書き込んだ文字列の長さを返す。
サンプル
フォーマット済み文字列をファイルに書き込む
define( "LOGFILE_DATE", "date.txt" );
if( !( $data = fopen( LOGFILE_DATE, "w" ) ) ) {
exit( "失敗。<br />ファイル「" . LOGFILE_DATE . "」を、開けませんでした。<br />" );
}
$varYear = 2012;
$varMonth = 7;
$varDay = 3;
$varArray = array( $varYear, $varMonth, $varDay );
$format = '%04d-%02d-%02d';
vfprintf( $data, $format, $varArray );
echo "書込み完了<br />";
echo "下記のデータを、書き込みました。<br />";
readfile( LOGFILE_DATE );
?>
↓↓↓出力結果↓↓↓
下記のデータを、書き込みました。
2012-07-03
ファイル「date.txt」の内容は、
ファイルに書き込んだ文字列の長さを取得
define( "LOGFILE_DATE", "date.txt" );
if( !( $data = fopen( LOGFILE_DATE, "w" ) ) ) {
exit( "失敗。<br />ファイル「" . LOGFILE_DATE . "」を、開けませんでした。<br />" );
}
$varYear = 2012;
$varMonth = 7;
$varDay = 3;
$varArray = array( $varYear, $varMonth, $varDay );
$format = '%04d-%02d-%02d';
$varCount = vfprintf( $data, $format, $varArray );
echo "書込み完了<br />";
echo "書き込んだ文字列の長さは、{$varCount}<br />";
echo "下記のデータを、書き込みました。<br />";
readfile( LOGFILE_DATE );
?>
↓↓↓出力結果↓↓↓
書き込んだ文字列の長さは、10
下記のデータを、書き込みました。
2012-07-03
ファイル「date.txt」の内容は、
CSVファイルに書き込む
define( "LOGFILE", "logfile.csv" );
if( !( $data = fopen( LOGFILE, "w" ) ) ) {
exit( "失敗。<br />ファイル「" . LOGFILE . "」を、開けませんでした。<br />" );
}
$format = '%s,%s,%s' . "\n";
$varArray = array(
array( "RED", "BLUE", "GREEN" ),
array( "レッド", "ブルー", "グリーン" ),
array( "赤色", "青色", "緑色" )
);
foreach( $varArray as $varValue ){
vfprintf( $data, $format, $varValue );
}
echo "書込み完了<br />";
echo "下記のデータを、書き込みました。<br />";
echo "<pre>";
readfile( LOGFILE );
echo "</pre>";
?>
↓↓↓出力結果↓↓↓
下記のデータを、書き込みました。
RED,BLUE,GREEN
レッド,ブルー,グリーン
赤色,青色,緑色
ファイル「logfile.csv」の内容は、
レッド,ブルー,グリーン
赤色,青色,緑色
日付を、フォーマットし、ファイルに書き込む
define( "LOGFILE", "logfile.txt" );
if( !( $data = fopen( LOGFILE, "w" ) ) ) {
exit( "失敗。<br />ファイル「" . LOGFILE . "」を、開けませんでした。<br />" );
}
$varYear = 2012;
$varMonth = 7;
$varDay = 3;
$varArray = array( $varYear, $varMonth, $varDay );
$format = '%04d-%02d-%02d';
vfprintf( $data, "年月日(YYYY-MM-DD): $format\n", $varArray );
$format = '%2$02d-%3$02d-%1$04d';
vfprintf( $data, "月日年(MM-DD-YYYY): $format\n", $varArray );
$format = '%3$02d-%2$02d-%1$04d';
vfprintf( $data, "日月年(DD-MM-YYYY): $format\n", $varArray );
$format = '%04d年%02d月%02d日';
vfprintf( $data, "年月日(YYYY年MM月DD日): $format\n", $varArray );
echo "書込み完了<br />";
echo "下記のデータを、書き込みました。<br />";
echo "<pre>";
readfile( LOGFILE );
echo "</pre>";
?>
↓↓↓出力結果↓↓↓
下記のデータを、書き込みました。
年月日(YYYY-MM-DD): 2012-07-03
月日年(MM-DD-YYYY): 07-03-2012
日月年(DD-MM-YYYY): 03-07-2012
年月日(YYYY年MM月DD日): 2012年07月03日
ファイル「logfile.txt」の内容は、
月日年(MM-DD-YYYY): 07-03-2012
日月年(DD-MM-YYYY): 03-07-2012
年月日(YYYY年MM月DD日): 2012年07月03日