Tác dụng của hàm vprintf()
Hàm vprintf()
xuất ra một chuỗi được định dạng.
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()
, vfprintf()
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 xuất ra. |
---|---|
Phiên bản: | PHP 4.1.0+ |
cú pháp
Cú pháp cơ bản của vprintf()
hàm được đưa ra với:
Ví dụ sau đây cho thấy vprintf()
chức năng đang hoạt động.
Ví dụ
<?php
// Sample array
$argarray = array("50", "United States");
// Defining the format string
$format = "There are %d states in the %s.";
// Formatting and print the string
vprintf($format, $argarray);
?>
Lưu ý: Mọi ký tự trong chuỗi định dạng sẽ được in 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 vprintf()
giống với printf()
, với một ngoại lệ. Hàm vprintf()
chấp nhận một mảng các đối số, trong khi hàm printf()
chấp nhận một danh sách các đối số.
Thông số
Hàm vprintf()
chấp nhận các tham số sau.
Tham số | Sự miêu tả |
---|---|
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ố chuyển đổi . |
argument_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 vprintf()
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 vprintf()
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ố.
Ví dụ
<?php
// Sample array
$array = array('star');
// Defining the format string
$format = 'The polar %1$s is the brightest %1$s in the sky.';
// Formatting and print the string
vprintf($format, $array);
?>
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.
Ví dụ
<?php
// 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 print the string
vprintf($format, $array);
?>
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 mảng. 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
// 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 print the string
vprintf($format, $array);
?>
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 mảng. 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
?>