printf() 是 PHP 內建的格式化輸出函數,能依指定格式將變數插入字串並直接輸出。本文系統整理其語法、格式化參數、常見旗標與多組實戰範例,幫助開發者快速掌握進階字串格式化技巧。
printf(string $format, mixed ...$args): int
% 開頭的格式化指令。% 指令的參數。若 % 數量多於參數,需使用位置佔位符(如 %1$)。相關函數:sprintf()、vprintf()、vsprintf()、fprintf()、vfprintf()。
| 指令 | 說明 |
|---|---|
%% | 輸出字面 % 符號 |
%b | 二進位數 |
%c | ASCII 字元 |
%d | 帶正負號十進位整數 |
%e / %E | 科學記號(小寫/大寫) |
%u | 無正負號十進位整數 |
%f / %F | 浮點數(受/不受 locale 影響) |
%g / %G | %e/%f 或 %E/%f 較短者 |
%o | 八進位數 |
%s | 字串 |
%x / %X | 十六進位(小寫/大寫) |
+:強制顯示正負號'char:指定填充字元(預設空格)-:左對齊[0-9]:最小寬度.[0-9]:小數位數或最大字串長度多重旗標須依上述順序排列。
<?php
$number = 123;
printf("%f", $number); // 123.000000
?>
<?php
$number = 123;
printf("兩位小數:%1\$.2f<br>無小數:%1\$u", $number);
// 兩位小數:123.00
// 無小數:123
?>
<?php
$num1 = 123456789;
$num2 = -123456789;
$char = 50; // ASCII '2'
printf("%%b = %b <br>", $num1);
printf("%%c = %c <br>", $char);
printf("%%d = %d <br>", $num1);
printf("%%d = %d <br>", $num2);
printf("%%e = %e <br>", $num1);
printf("%%E = %E <br>", $num1);
printf("%%u = %u <br>", $num1);
printf("%%u = %u <br>", $num2);
printf("%%f = %f <br>", $num1);
printf("%%F = %F <br>", $num1);
printf("%%g = %g <br>", $num1);
printf("%%G = %G <br>", $num1);
printf("%%o = %o <br>", $num1);
printf("%%s = %s <br>", $num1);
printf("%%x = %x <br>", $num1);
printf("%%X = %X <br>", $num1);
printf("%%+d = %+d <br>", $num1);
printf("%%+d = %+d <br>", $num2);
?>
<?php
$str1 = "Hello";
$str2 = "Hello world!";
printf("[%s]<br>", $str1);
printf("[%8s]<br>", $str1); // 右對齊,寬度 8
printf("[%-8s]<br>", $str1); // 左對齊
printf("[%08s]<br>", $str1); // 0 填充
printf("[%'*8s]<br>", $str1); // * 填充
printf("[%8.8s]<br>", $str2); // 寬度 8,最大長度 8
?>
掌握 printf() 能讓輸出格式更精準、代碼更簡潔,是處理報表、日誌、介面輸出的利器。