Tác dụng của hàm vsprintf()
Hàm vsprintf()
trả về một chuỗi được định dạng.
Không giống như printf()
, vsprintf()
trả về chuỗi được định dạng để bạn có thể gán nó cho một biến.
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 : fprintf()
,, và .printf()
sprintf()
vfprintf()
vprintf()
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ề chuỗi được định dạng khi thành công hoặc FALSE khi thất bại. |
---|---|
Phiên bản: | PHP 4.1.0+ |
Cú pháp
Cú pháp cơ bản của hàm vsprintf()
Ví dụ sau về vsprintf()
chức năng đang hoạt động.
Thí 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
echo vsprintf($format, $argarray);
?>
Lưu ý: Mọi ký tự trong chuỗi format sẽ được in 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 vsprintf()
này giống hệt sprintf()
, với một ngoại lệ. Hàm vsprintf()
chấp nhận một mảng đối số, trong khi hàm sprintf()
chấp nhận một danh sách các đối số.
Thông số
Hàm vsprintf()
chấp nhận các tham số sau.
Tham số | Sự mô 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ố kỹ thuật chuyển đổi . |
argument_array | Yêu cầu. Chỉ định một mảng đối số sẽ được định dạng và chèn vào các vị trí của thông số kỹ thuật 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 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 vsprintf()
sau chuỗi format .
Ngoài ra, bạn có thể sử dụng số đối số theo sau là dấu đô la (tức là argnum$
) để áp dụng nhiều thông số kỹ thuật chuyển đổi trong chuỗi định dạng 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 cờ bao gồm một hoặc nhiều ký tự sau:
Flag | Sự 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 vsprintf()
:
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
// 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
echo vsprintf($format, $array);
?>
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
// 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
echo vsprintf($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 .
Thí 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
echo vsprintf($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ỗ tham chiếu đến và giữ nguyên mã hàm.
Ví dụ sau đây chỉ đơn giản là minh họa kết quả có thể xảy ra khi sử dụng các từ định dạng khác nhau cho các giá trị số nguyên bằng cách sử dụng hàm sprintf()
.
Thí dụ
<?php
// Sample integers
$num1 = 123456789;
$num2 = -123456789;
$num3 = 65; // ASCII 65 is 'A'
// Notice the double %%, this simply prints a '%' character
echo sprintf("%%b = %b <br>",$num1); // Binary representation
echo sprintf("%%c = %c <br>",$num3); // The ASCII Character
echo sprintf("%%d = %d <br>",$num1); // Standard integer representation
echo sprintf("%%d = %d <br>",$num2); // Standard integer representation
echo sprintf("%%e = %e <br>",$num1); // Scientific notation (lowercase)
echo sprintf("%%E = %E <br>",$num1); // Scientific notation (uppercase)
echo sprintf("%%u = %u <br>",$num1); // Unsigned integer representation (positive)
echo sprintf("%%u = %u <br>",$num2); // Unsigned integer representation (negative)
echo sprintf("%%f = %f <br>",$num1); // Floating-point representation (locale aware)
echo sprintf("%%F = %F <br>",$num1); // Floating-point representation (non-locale aware)
echo sprintf("%%g = %g <br>",$num1); // Shorter of %e and %f
echo sprintf("%%G = %G <br>",$num1); // Shorter of %E and %f
echo sprintf("%%o = %o <br>",$num1); // Octal representation
echo sprintf("%%s = %s <br>",$num1); // String representation
echo sprintf("%%x = %x <br>",$num1); // Hexadecimal representation (lowercase)
echo sprintf("%%X = %X <br>",$num1); // Hexadecimal representation (uppercase)
echo sprintf("%%+d = %+d <br>",$num1); // Sign specifier (positive)
echo sprintf("%%+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!";
echo sprintf("[%s]<br>", $str1); // Standard string output
echo sprintf("[%10s]<br>", $str1); // Right-justifies the string with spaces
echo sprintf("[%-10s]<br>", $str1); // Left-justifies the string value with spaces
echo sprintf("[%010s]<br>", $str1); // Left-pads string with zeros.
echo sprintf("[%-010s]<br>", $str1); // Right-pads string with zeros
echo sprintf("[%'#10s]<br>", $str1); // Left-pads string with '#' character
echo sprintf("[%.10s]<br>", $str2); // Cuts off string after 10 characters
?>