Hướng dẫn
Quảng cáo

Hàm vfprintf() trong PHP

Hướng dẫn cách sử dụng hàm vfprintf() trong lập trình PHP

Tác dụng của hàm vfprintf()

Hàm vfprintf()ghi một chuỗi được định dạng vào một luồng, thường là một tệp.

Hàm này nhận một chuỗi định dạng đặc biệt và sau đó là bất kỳ đối số nào khác, sẽ được định dạng và ghép vào các vị trí đã chỉ định trong chuỗi định dạng để tạo kết quả.

Các chức năng liên quan: fprintf()printf()sprintf()vprintf()và vsprintf().

Bảng sau đây tóm tắt các chi tiết kỹ thuật của chức năng này.

Giá trị trả về: Trả về độ dài của chuỗi đã viết.
Phiên bản: PHP5+

cú pháp

Cú pháp cơ bản của vfprintf()hàm được đưa ra với:

vfprintf ( luồng , định dạng , đối số_mảng );

Ví dụ sau đây cho thấy vfprintf()chức năng đang hoạt động.

<?php
$file = "data.txt";

// Open the file for writing
$handle = fopen($file, "w") or die("ERROR: Cannot open the file.");

// Sample array
$argarray = array("50", "United States");

// Defining the format string
$format = "There are %d states in the %s.";

// Formatting and write the string to file
$length = vfprintf($handle, $format, $argarray);

echo "Wrote $length bytes to data.txt";
?>

Đầu ra của ví dụ trên sẽ giống như thế này:

Đã ghi 41 byte vào data.txt

Và, văn bản được ghi vào tệp "data.txt" sẽ là:

Có 50 tiểu bang ở Hoa Kỳ.

Trong ví dụ trên, nếu tệp "data.txt" không tồn tại, PHP sẽ tự động tạo tệp đó và ghi dữ liệu. Tuy nhiên, nếu tệp "data.txt" đã tồn tại, PHP sẽ xóa nội dung của tệp này, nếu có, trước khi ghi dữ liệu mới. Xem hướng dẫn về hệ thống tệp PHP để tìm hiểu thêm về nó.

 

Lưu ý: Mọi ký tự trong chuỗi định dạng sẽ được viết theo nghĩa đen, ngoại trừ ký tự % và các ký tự ngay sau ký tự đó. Ký tự % cho biết phần đầu của thông số chuyển đổi , chỉ định cách in các đối số tuân theo chuỗi định dạng .

 

Mẹo: Chức năng này vfprintf()giống với fprintf(), với một ngoại lệ. Hàm vfprintf()chấp nhận một mảng các đối số, trong khi hàm fprintf()chấp nhận một danh sách các đối số.


Thông số

Hàm vfprintf()chấp nhận các tham số sau.

Tham số Sự miêu tả
suối Yêu cầu. Chỉ định tài nguyên con trỏ hệ thống tệp thường được tạo bằng fopen().
định dạng Yêu cầu. Chỉ định chuỗi định dạng. Nó bao gồm các ký tự thông thường (không bao gồm %) và một hoặc nhiều thông số chuyển đổi .
đối số_array Yêu cầu. Chỉ định một mảng các đối số sẽ được định dạng và chèn vào các vị trí của thông số chuyển đổi trong chuỗi định dạng .

Cú pháp đặc tả chuyển đổi

Phần này mô tả chi tiết cú pháp của đặc tả chuyển đổi trong chuỗi định dạng .

Thông số kỹ thuật chuyển đổi bắt đầu bằng ký hiệu phần trăm (%). Bạn phải bao gồm một đặc tả chuyển đổi cho từng đối số được chuyển đến vfprintf()hàm sau chuỗi định dạng .

Ngoài ra, bạn có thể sử dụng số đối số theo sau là ký hiệu đô la (nghĩa là argnum$) để áp dụng nhiều thông số chuyển đổi trong chuỗi định dạng cho cùng một đối số. Nó phải xuất hiện ngay sau dấu phần trăm (%), trước bất kỳ từ chỉ định nào khác. Xem thêm phần ví dụ.

Một đặc tả chuyển đổi thường có cú pháp sau:

%[argnum$][flags][width][.precision]specifier

argnum

Một số nguyên theo sau là ký hiệu đô la $, để chỉ định đối số số nào sẽ được xử lý trong quá trình chuyển đổi.

cờ

Các cờ bao gồm một hoặc nhiều ký tự sau:

Lá cờ Sự miêu tả
+ Thêm dấu cộng trước số dương. Theo mặc định, chỉ các số âm được đánh dấu.
- Căn trái trong phạm vi chiều rộng trường nhất định; Biện minh đúng là mặc định.
(space) Đệm kết quả bằng khoảng trắng. Đây là mặc định.
0 Chỉ các số bên trái có số không. Với s specifiers này cũng có thể đệm bên phải với số không.
'(char) Đệm kết quả bằng ký tự (char). Phải được sử dụng cùng với bộ xác định chiều rộng.

chiều rộng

Một số nguyên cho biết chuyển đổi này sẽ tạo ra bao nhiêu ký tự (tối thiểu).

độ chính xác

Dấu chấm (.) theo sau là một số nguyên có ý nghĩa phụ thuộc vào từ chỉ định:

  • Đối với các chỉ định e, E, f và F: đây là số chữ số được in sau dấu thập phân (theo mặc định, đây là 6).
  • Đối với g và G specifiers: đây là số chữ số có nghĩa tối đa được in.
  • Đối với công cụ xác định s: nó hoạt động như một điểm cắt, đặt giới hạn ký tự tối đa cho chuỗi.

Nếu khoảng thời gian được chỉ định mà không có giá trị rõ ràng cho độ chính xác, thì 0 được giả định.

người xác định

Một ký tự đơn cho biết cách diễn giải loại đối số.

người xác định Sự miêu tả
% Một ký tự phần trăm theo nghĩa đen. Không có đối số được yêu cầu.
b Đối số được coi là số nguyên và được in dưới dạng số nhị phân.
c Đối số được coi là một số nguyên và được in dưới dạng ký tự có mã ASCII đó.
d Đối số được coi là số nguyên và được in dưới dạng số thập phân (có dấu).
e Đối số được coi là ký hiệu khoa học (ví dụ: 1.2e+2). Công cụ xác định độ chính xác là viết tắt của số chữ số sau dấu thập phân.
E Giống như chỉ định e nhưng sử dụng chữ in hoa (ví dụ: 1.2E+2).
f Đối số được coi là số float và được in dưới dạng số dấu phẩy động (nhận biết ngôn ngữ).
F Đối số được coi là số float và được in dưới dạng số dấu phẩy động (không nhận biết ngôn ngữ).
g Định dạng chung. Sử dụng e và f.
G Giống như công cụ xác định g nhưng sử dụng E và f.
o Đối số được coi là số nguyên và được in dưới dạng số bát phân.
s Đối số được xử lý và in dưới dạng một chuỗi.
u Đối số được coi là số nguyên và được in dưới dạng số thập phân không dấu.
x Đối số được coi là một số nguyên và được in dưới dạng số thập lục phân (chữ thường).
X Đối số được coi là số nguyên và được in dưới dạng số thập lục phân (chữ in hoa).

Thêm ví dụ

Dưới đây là một số ví dụ khác cho thấy vfprintf()chức năng thực sự hoạt động như thế nào:

Ví dụ sau đây cho thấy cách áp dụng nhiều đặc tả chuyển đổi cho cùng một đối số.

<?php
$file = "data.txt";

// Open the file for writing
$handle = fopen($file, "w") or die("ERROR: Cannot open the file.");

// Sample array
$array = array('star');

// Defining the format string
$format = 'The polar %1$s is the brightest %1$s in the sky.';

// Formatting and write the string to file
$length = vfprintf($handle, $format, $array);

echo "Wrote $length bytes to data.txt";
?>

Đầu ra của ví dụ trên sẽ giống như thế này:

Đã ghi 48 byte vào data.txt

Và, văn bản được ghi vào tệp "data.txt" sẽ là:

Ngôi sao bắc cực là ngôi sao sáng nhất trên bầu trời.
 

Mẹo: Nếu chuỗi định dạng được đặt trong dấu ngoặc kép (""), bạn cần thoát ký hiệu đô la sau argnum bằng ký tự gạch chéo ngược (\), như thế này %1\$s, để PHP không cố diễn giải chúng dưới dạng biến . Sử dụng dấu gạch chéo ngược như thế này được gọi là chuỗi thoát.

Ví dụ sau đây cho thấy cách định dạng cùng một số có và không có dấu thập phân.

<?php
$file = "data.txt";

// Open the file for writing
$handle = fopen($file, "w") or die("ERROR: Cannot open the file.");

// Sample array
$array = array(499);

// Defining the format string
$format = "The number without decimal points: %1\$d, and the number with two decimal points: %1\$.2f";

// Formatting and write the string to file
$length = vfprintf($handle, $format, $array);

echo "Wrote $length bytes to data.txt";
?>

Đầu ra của ví dụ trên sẽ giống như thế này:

Đã ghi 86 byte vào data.txt

Và, văn bản được ghi vào tệp "data.txt" sẽ là:

Số không có dấu thập phân: 499 và số có hai dấu thập phân: 499,00

Theo mặc định, mỗi đặc tả chuyển đổi sẽ được thay thế bằng đối số được định dạng theo thứ tự chúng được liệt kê bên trong hàm. Tuy nhiên, bạn có thể hoán đổi các đối số bên trong chuỗi định dạng bằng cách sử dụng argnum .

Ví dụ

<?php
$file = "data.txt";

// Open the file for writing
$handle = fopen($file, "w") or die("ERROR: Cannot open the file.");

// Sample array
$array = array("50", "United States");

// Defining the format string
$format = "The %2\$s is a federal republic of %1\$d states.";

// Formatting and write the string to file
$length = vfprintf($handle, $format, $array);

echo "Wrote $length bytes to data.txt";
?>

Đầu ra của ví dụ trên sẽ giống như thế này:

Đã ghi 53 byte vào data.txt

Và, văn bản được ghi vào tệp "data.txt" sẽ là:

Hoa Kỳ là một nước cộng hòa liên bang gồm 50 tiểu bang.
 

Mẹo: Nếu thứ tự của trình giữ chỗ hoặc thông số kỹ thuật chuyển đổi trong chuỗi định dạng không khớp với thứ tự của các đối số được liệt kê bên trong hàm. Bạn có thể sử dụng argnum để dễ dàng chỉ ra đối số nào mà trình giữ chỗ đề cập đến và giữ nguyên mã hàm.

Ví dụ sau đây chỉ minh họa điều gì sẽ là kết quả có thể xảy ra khi sử dụng các bộ xác định định dạng khác nhau cho các giá trị số nguyên bằng cách sử dụng hàm printf().

Ví dụ

<?php
// Sample integers
$num1 = 123456789;
$num2 = -123456789;
$num3 = 65; // ASCII 65 is 'A'

// Notice the double %%, this simply prints a '%' character
printf("%%b = %b <br>", $num1); // Binary representation
printf("%%c = %c <br>", $num3); // The ASCII Character
printf("%%d = %d <br>", $num1); // Standard integer representation
printf("%%d = %d <br>", $num2); // Standard integer representation
printf("%%e = %e <br>", $num1); // Scientific notation (lowercase)
printf("%%E = %E <br>", $num1); // Scientific notation (uppercase)
printf("%%u = %u <br>", $num1); // Unsigned integer representation (positive)
printf("%%u = %u <br>", $num2); // Unsigned integer representation (negative)
printf("%%f = %f <br>", $num1); // Floating-point representation (locale aware)
printf("%%F = %F <br>", $num1); // Floating-point representation (non-locale aware)
printf("%%g = %g <br>", $num1); // Shorter of %e and %f
printf("%%G = %G <br>", $num1); // Shorter of %E and %f
printf("%%o = %o <br>", $num1); // Octal representation
printf("%%s = %s <br>", $num1); // String representation
printf("%%x = %x <br>", $num1); // Hexadecimal representation (lowercase)
printf("%%X = %X <br>", $num1); // Hexadecimal representation (uppercase)
printf("%%+d = %+d <br>", $num1); // Sign specifier (positive)
printf("%%+d = %+d <br>", $num2); // Sign specifier (negative)
?>

Tương tự, ví dụ sau cho thấy cách định dạng một chuỗi theo nhiều cách khác nhau bằng cách sử dụng s specifier.

Ví dụ

<?php
$str1 = "Hello";
$str2 = "Hello Alexander!";

printf("[%s]<br>", $str1);     // Standard string output
printf("[%10s]<br>", $str1);   // Right-justifies the string with spaces
printf("[%-10s]<br>", $str1);  // Left-justifies the string value with spaces
printf("[%010s]<br>", $str1);  // Left-pads string with zeros.
printf("[%-010s]<br>", $str1); // Right-pads string with zeros
printf("[%'#10s]<br>", $str1); // Left-pads string with '#' character
printf("[%.10s]<br>", $str2);  // Cuts off string after 10 characters
?>

Bài viết này đã giúp ích cho bạn?

Bài viết mới

Advertisements