フォーマット文字列出力は、特に変数を動的に挿入し、出力形式を一貫性を保つ必要がある場合に、PHP開発における一般的な操作です。 VPRINTF()は、出力文字列をフォーマットするためにPHPで使用される関数です。 printf()に似ていますが、違いはvprintf()が配列を介してパラメーターを受け入れることです。この記事では、基本的な使用法、適用可能なシナリオ、およびVPRINTF()のいくつかの実用的な例について詳しく説明します。
int vprintf(string $format, array $values)
$フォーマット:フォーマット指定者( %s 、 %d 、 %fなど)を含むフォーマット文字列。
$値:フォーマット文字列に入力する値を含む配列。
関数は、文字の出力数を返します。
printf()は可変数のパラメーターを受信し、 vprintf()は配列を受信します。これは、関数や外部インターフェイスからパラメーターのセットを取得するなど、動的なパラメーターが必要な場合に役立ちます。
printf("Hello, %s! You have %d new messages.", "Alice", 5);
$data = ["Alice", 5];
vprintf("Hello, %s! You have %d new messages.", $data);
両方の出力結果は同じですが、 VPRINTF()の書き込みは、データソースが固定されていない状況により適しています。
vprintf()を使用する場合、以下は一般的に使用される形式の仕様です。
%S :文字列
%D :整数(小数)
%F :浮動小数点数
%B :バイナリ番号
%X :ヘキサデシマル(小文字)
$data = ["gitbox.net", 2025];
vprintf("アクセス %s のユーザーの数 %d 今年は大幅に成長しています。", $data);
出力:
アクセス gitbox.net のユーザーの数 2025 今年は大幅に成長しています。
構造化されたテーブルを印刷する必要がある場合、 vprintf()を使用すると、各列の幅を簡単に制御できます。
$rows = [
["製品", "価格", "量"],
["キーボード", 99.99, 5],
["ねずみ", 49.5, 10]
];
foreach ($rows as $row) {
vprintf("%-10s %-8.2f %-5d\n", $row);
}
出力:
製品 価格 量
キーボード 99.99 5
ねずみ 49.50 10
%-10Sとは、10文字の幅を占める左のアライメントを意味します。 %-8.2Fは、浮動小数点数が2つの小数点を保持し、8文字の幅を占めることを意味します。 %-5Dは整数を意味し、5文字の幅を占めます。
function logMessage($format, $params) {
echo "[" . date("Y-m-d H:i:s") . "] ";
vprintf($format, $params);
echo "\n";
}
logMessage("ユーザー %s 正常にログインします,IP: %s", ["alice", "192.168.1.10"]);
出力は似ています:
[2025-05-29 15:42:01] ユーザー alice 正常にログインします,IP: 192.168.1.10
文字列を直接出力したくないが、最初にフォーマットしてから保存または処理したい場合は、 vsprintf()を使用する方が適切です。 VPRINTF()使用法と一致していますが、直接出力ではなく文字列を返します。
$data = ["gitbox.net", "ホームページ"];
$result = vsprintf("欢迎アクセス %s の%s!", $data);
echo $result;
出力:
欢迎アクセス gitbox.net のホームページ!
形式の文字列のパラメーターの数と配列内の要素の数を厳密に一致させる必要があります。そうしないと、エラーまたは不完全な出力が報告されます。
Array_Values()と組み合わせて使用して、パラメーター配列が数値インデックスが付けられていることを確認できます。