PHP Conference Japan 2024

vfprintf

(PHP 5, PHP 7, PHP 8)

vfprintf將格式化字串寫入資料流

描述

vfprintf(資源 $stream, 字串 $format, 陣列 $values): 整數

將根據 format 產生的字串寫入由 stream 指定的串流資源。

操作方式與 fprintf() 相同,但接受一個參數陣列,而不是可變數量的參數。

參數

stream (串流)

format (格式)

格式字串由零個或多個指示項組成:直接複製到結果的普通字元(不包括 %)和*轉換規格*,每個規格都會擷取其自身的參數。

轉換規格遵循以下原型:%[argnum$][flags][width][.precision]specifier

Argnum (參數編號)

後跟一個錢字號 $ 的整數,用於指定在轉換中要處理的參數編號。

Flags (旗標)
旗標 描述
- 在給定的欄位寬度內靠左對齊;預設為靠右對齊。
+ 在正數前面加上加號 +;預設情況下,只有負數前面會加上負號。
(空格) 使用空格填充結果。這是預設行為。
0 僅使用零填充數字的左側。對於 s 規格,也可以使用零填充右側。
'(char, 字元) 使用字元 (char) 填充結果。

Width (寬度)

一個整數,表示此轉換應產生的最少字元數,或者使用 *。如果使用 *,則寬度會作為一個額外的整數值提供,位於要格式化的規格之前的參數。

Precision (精確度)

一個句點 .,後面可以選擇跟著一個整數或 *,其含義取決於規格。

  • 對於 eEfF 規格:這是要列印在小數點後的位數(預設為 6)。
  • 對於 gGhH 規格:這是要列印的最大有效位數。
  • 對於 s 規格:它作為一個截斷點,設定字串的最大字元限制。

注意如果指定了句點但沒有明確的精確度值,則假設為 0。如果使用 *,則精確度會作為一個額外的整數值提供,位於要格式化的規格之前的參數。

Specifiers (規格)
規格 描述
% 一個字面百分比字元。不需要參數。
b 將參數視為整數,並以二進位數呈現。
c 將參數視為整數,並以具有該 ASCII 碼的字元呈現。
d 將參數視為整數,並以(帶正負號的)十進位數呈現。
e 將參數視為科學記號法(例如 1.2e+2)。
E e 規格類似,但使用大寫字母(例如 1.2E+2)。
f 將參數視為浮點數,並以浮點數呈現(考慮地區設定)。
F 將參數視為浮點數,並以浮點數呈現(不考慮地區設定)。
g

一般格式。

設 P 等於精確度(如果非零),如果省略精確度則為 6,如果精確度為零則為 1。然後,如果使用 E 格式的轉換的指數為 X

如果 P > X ≥ −4,則使用 f 格式和精確度 P − (X + 1) 進行轉換。否則,使用 e 格式和精確度 P − 1 進行轉換。

G g 格式指定字元類似,但使用 Ef
h g 格式指定字元類似,但使用 F。PHP 8.0.0 起可用。
H g 格式指定字元類似,但使用 EF。PHP 8.0.0 起可用。
o 參數會被視為整數,並以八進位數字呈現。
s 參數會被視為字串並以字串呈現。
u 參數會被視為整數,並以無號十進位數字呈現。
x 參數會被視為整數,並以十六進位數字呈現(使用小寫字母)。
X 參數會被視為整數,並以十六進位數字呈現(使用大寫字母)。

警告

c 類型指定字元會忽略填補和寬度。

警告

嘗試將字串和寬度指定字元與每個字元需要超過一個位元組的字元集組合使用可能會導致非預期的結果。

變數將會被強制轉換為適合指定字元的類型

類型處理
類型 Specifiers (規格)
字串 s
整數 ducoxXb
浮點數 eEfFgGhH

回傳值

回傳輸出字串的長度。

錯誤/例外

從 PHP 8.0.0 開始,如果參數數量為零,則會拋出 ValueError。在 PHP 8.0.0 之前,則會發出 E_WARNING

從 PHP 8.0.0 開始,如果 [width] 小於零或大於 PHP_INT_MAX,則會拋出 ValueError。在 PHP 8.0.0 之前,則會發出 E_WARNING

從 PHP 8.0.0 開始,如果 [precision] 小於零或大於 PHP_INT_MAX,則會拋出 ValueError。在 PHP 8.0.0 之前,則會發出 E_WARNING

從 PHP 8.0.0 開始,如果提供的參數少於所需參數,則會拋出 ValueError。在 PHP 8.0.0 之前,會回傳 false 並發出 E_WARNING

更新日誌

版本 描述
8.0.0 此函式在失敗時不再回傳 false
8.0.0 如果參數數量為零,則拋出 ValueError;先前此函式會發出 E_WARNING
8.0.0 如果 [width] 小於零或大於 PHP_INT_MAX,則拋出 ValueError;先前此函式會發出 E_WARNING
8.0.0 如果 [precision] 小於零或大於 PHP_INT_MAX,則拋出 ValueError;先前此函式會發出 E_WARNING
8.0.0 當提供的引數少於所需引數時,會丟出 ValueError;先前此函式會發出 E_WARNING

範例

範例 #1 vfprintf():零填充整數

<?php
if (!($fp = fopen('date.txt', 'w')))
return;

vfprintf($fp, "%04d-%02d-%02d", array($year, $month, $day));
// 將格式化的 ISO 日期寫入 date.txt
?>

參見

新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top