在PHP 開發中,格式化字符串輸出是常見的操作,尤其是在需要動態插入變量並保持輸出格式一致時。 vprintf()是PHP 中用於格式化輸出字符串的一種函數,它和printf()類似,但與之不同的是, vprintf()接受參數的方式是通過數組。本文將深入講解vprintf()的基本用法、適用場景以及一些實用示例。
int vprintf(string $format, array $values)
$format :一個格式字符串,包含了格式說明符(例如%s , %d , %f等)。
$values :一個數組,包含要填充到格式字符串中的值。
函數返回輸出的字符數。
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表示浮點數保留兩位小數,佔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()使用,確保參數數組是數字索引的。