Tác dụng của hàm fprintf()
Hàm fprintf()
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ỳ số đối số nào khác, sẽ được định dạng và nối vào những vị trí được chỉ định trong chuỗi định dạng để tạo ra kết quả.
Các hàm liên quan : printf()
,sprintf()
,vfprintf()
,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ả lại: | Trả về độ dài của chuỗi được viết. |
---|---|
Phiên bản: | PHP 5+ |
Cú pháp
Cú pháp cơ bản của hàm fprintf()
:
Ví dụ về hàm fprintf()
.
Thí dụ
<?php
$file = "data.txt";
// Open the file for writing
$handle = fopen($file, "w") or die("ERROR: Cannot open the file.");
// Sample strings
$count = 50;
$country = "United States";
$format = "There are %d states in the %s.";
// Formatting and write the string to file
$length = fprintf($handle, $format, $count, $country);
echo "Wrote $length bytes to data.txt";
?>
Kết quả của ví dụ trên sẽ giống như sau:
Và, văn bản được ghi vào tệp "data.txt" sẽ là:
Trong ví dụ trên, nếu tệp "data.txt" không tồn tại, PHP sẽ tự động tạo 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 format sẽ được viết theo nghĩa đen, ngoại trừ ký tự% và các ký tự ngay sau nó. Ký tự% cho biết sự bắt đầu của một đặc tả chuyển đổi , chỉ định cách in các đối số tuân theo chuỗi format .
Mẹo: Hàm fprintf()
rất giống với printf()
ngoại trừ hàm printf()
xuất ra một chuỗi văn bản trực tiếp, tương tự như câu lệnh print
và echo
, trong khi hàm fprintf()
ghi kết quả đầu ra vào một tệp.
Thông số
Hàm fprintf()
chấp nhận các tham số sau.
Tham số | Sự mô tả |
---|---|
stream | Yêu cầu. Chỉ định tài nguyên con trỏ hệ thống tệp thường được tạo bằng cách sử dụng fopen() . |
format | 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ố kỹ thuật chuyển đổi . |
arg1 | Yêu cầu. Chỉ định đối số được định dạng và chèn vào vị trí của đặc tả chuyển đổi đầu tiên trong chuỗi định dạng . |
arg2 | Không bắt buộc. Chỉ định đối số được định dạng và chèn vào vị trí của đặc tả chuyển đổi thứ hai trong chuỗi định dạng . |
argN | Không bắt buộc. Chỉ định đối số được định dạng và chèn vào vị trí của đặc tả chuyển đổi thứ N 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 format .
Đặc 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 mỗi đối số được truyền cho hàm fprintf()
sau chuỗi format .
Ngoài ra, bạn có thể sử dụng số đối số theo sau là dấu $ (tức là argnum$
) để áp dụng nhiều thông số kỹ thuật chuyển đổi trong chuỗi format cho cùng một đối số. Nó phải đứng ngay sau dấu phần trăm (%), trước bất kỳ ký hiệu nào khác. Xem thêm phần ví dụ.
Đặ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à một ký hiệu đô la $, để chỉ định đối số số nào sẽ được xử lý trong chuyển đổi.
flags
Các flags bao gồm một hoặc nhiều ký tự sau:
Flag | Mô tả |
---|---|
+ |
Thêm một dấu cộng trước các số dương. Theo mặc định, chỉ các số âm mới được đánh dấu. |
- |
Căn trái trong chiều rộng trường đã cho; Biện minh đúng là mặc định. |
(space) |
Chèn kết quả bằng dấu cách. Đây là mặc định. |
0 |
Chỉ các số bên trái có số không. Với các chỉ định của s, điều này cũng có thể gõ phím phải bằng các số không. |
'(char) |
Chèn kết quả bằng ký tự (char). Phải được sử dụng cùng với chỉ định chiều rộng. |
width
Một số nguyên cho biết chuyển đổi này sẽ dẫn đến bao nhiêu ký tự (tối thiểu).
precision (độ chính xác)
Dấu chấm (.) Theo sau bởi một số nguyên, ý nghĩa của nó phụ thuộc vào từ xác định:
- Đối với các ký hiệu 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 ký hiệu g và G: đây là số chữ số có nghĩa tối đa được in.
- Đối với chỉ định của 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ì giá trị 0 được giả định.
specifier
Một ký tự duy nhất cho biết loại đối số sẽ được diễn giải như thế nào.
specifier | Sự mô tả |
---|---|
% |
Một ký tự phần trăm theo nghĩa đen. Không cần đối số. |
b |
Đối số được coi là số nguyên và được in ra 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ự với 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 như ký hiệu khoa học (ví dụ: 1.2e + 2). Bộ chỉ đị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ư định nghĩa e nhưng sử dụng chữ hoa (ví dụ: 1.2E + 2). |
f |
Đối số được coi như một số thực và được in ra dưới dạng số dấu phẩy động (nhận biết ngôn ngữ). |
F |
Đối số được coi như một số thực và được in ra dưới dạng số dấu phẩy động (nhận biết không phải ngôn ngữ). |
g |
Định dạng chung. Sử dụng e và f. |
G |
Giống như thông số g nhưng sử dụng E và f. |
o |
Đối số được coi là số nguyên và được in ra dưới dạng số bát phân. |
s |
Đối số được xử lý và in ra 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à 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ữ hoa). |
Các ví dụ khác
Dưới đây là một số ví dụ khác về hàm fprintf()
:
Ví dụ sau đây cho thấy cách áp dụng nhiều thông số kỹ thuật chuyển đổi cho cùng một đối số.
Thí dụ
<?php
$file = "data.txt";
// Open the file for writing
$handle = fopen($file, "w") or die("ERROR: Cannot open the file.");
// Sample string
$str = 'star';
$format = 'The polar %1$s is the brightest %1$s in the sky.';
// Formatting and write the string to file
$length = fprintf($handle, $format, $str);
echo "Wrote $length bytes to data.txt";
?>
Kết quả của ví dụ trên sẽ giống như sau:
Và, văn bản được ghi vào tệp "data.txt" sẽ là:
Mẹo: Nếu chuỗi định dạng được đặt trong dấu ngoặc kép (""), bạn cần phải thoát khỏi ký hiệu đô la sau argnum bằng một ký tự gạch chéo ngược (\), như thế này %1\$s
, để PHP không cố gắng diễn giải chúng là biến . Sử dụng một dấu gạch chéo ngược như thế này được gọi là một 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.
Thí dụ
<?php
$file = "data.txt";
// Open the file for writing
$handle = fopen($file, "w") or die("ERROR: Cannot open the file.");
// Sample string
$number = 499;
$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 = fprintf($handle, $format, $number);
echo "Wrote $length bytes to data.txt";
?>
Kết quả của ví dụ trên sẽ giống như sau:
Và, văn bản được ghi vào tệp "data.txt" sẽ là:
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 .
Thí dụ
<?php
$file = "data.txt";
// Open the file for writing
$handle = fopen($file, "w") or die("ERROR: Cannot open the file.");
// Sample strings
$count = 50;
$country = "United States";
$format = "The %2\$s is a federal republic of %1\$d states.";
// Formatting and write the string to file
$length = fprintf($handle, $format, $count, $country);
echo "Wrote $length bytes to data.txt";
?>
Kết quả của ví dụ trên sẽ giống như sau:
Và, văn bản được ghi vào tệp "data.txt" sẽ là:
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ỗ tham chiếu đến và giữ nguyên mã hàm.
Ví dụ sau chỉ đơn giản là minh họa kết quả có thể xảy ra khi sử dụng các định dạng định dạng khác nhau cho các giá trị số nguyên bằng cách sử dụng hàm printf()
.
Thí 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 đây 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 trình chỉ định s.
Thí 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
?>