2012-07-24 64 views

Trả lời

37

với các ký tự printf hoặc sprintf đứng trước dấu% là phần giữ chỗ (hoặc mã thông báo). Chúng sẽ được thay thế bằng một biến được chuyển thành một đối số.

Ví dụ:

$str1 = 'best'; 
$str2 = 'world'; 

$say = sprintf('Tivie is the %s in the %s!', $str1, $str2); 
echo $say; 

Sản lượng này sẽ:

Tivie là tốt nhất trên thế giới!

Lưu ý: Có nhiều placeholders (% s cho chuỗi,% d cho số Tháng Mười Hai, vv ...)


thứ tự:

Thứ tự mà bạn vượt qua các đối số đếm. Nếu bạn chuyển $ str1 với $ str2 như

$say = sprintf('Tivie is the %s in the %s!', $str2, $str1); 

nó sẽ in

"Tivie là thế giới trong là tốt nhất!"

Bạn có thể, tuy nhiên, thay đổi thứ tự đọc của lập luận như thế này:

$say = sprintf('Tivie is the %2$s in the %1$s!', $str2, $str1); 

mà sẽ in câu một cách chính xác.


Ngoài ra, hãy nhớ rằng PHP là ngôn ngữ động và không yêu cầu (hoặc hỗ trợ) định nghĩa loại rõ ràng. Điều đó có nghĩa là nó juggles biến loại khi cần thiết. Trong chạy nước rút nó có nghĩa là nếu bạn vượt qua một "chuỗi" làm đối số cho một trình giữ chỗ số (% d), chuỗi đó sẽ được chuyển đổi thành một số (int, float ...) có thể có kết quả lạ. Dưới đây là một ví dụ:

$onevar = 2; 
$anothervar = 'pocket'; 
$say = sprintf('I have %d chocolate(s) in my %d.', $onevar, $anothervar); 
echo $say; 

này sẽ in

tôi có 2 sô cô la (s) trong môn đọc 0.

More tôi tại PHPdocs

+0

Tôi nghĩ rằng ví dụ của bạn cùng với lời giải thích của Ned làm cho một câu trả lời khá vững chắc. Câu hỏi: nếu tôi viết 'sprintf (' Tivie là% s trong% s! ', $ Str2, $ str2); ', nó sẽ echo" 'Tivie là thế giới tốt nhất!' "? –

+1

nó sẽ xuất ra "Tivie là thế giới trên thế giới" kể từ str2 = thế giới, – Tivie

+0

Hoan hô cho typo. Tôi có một tiếng cười. Vì vậy, '% strn' trả về giá trị'% s [n] ', để nói? Với cùng một ký hiệu đó, '% s% s' trả về giá trị'% s [0]% s [1] '? –

9

Trong printf, %s là một giữ chỗ cho dữ liệu đó sẽ được chèn vào chuỗi. Các đối số bổ sung cho printf là các giá trị được chèn vào. Chúng được liên kết với trình giữ chỗ theo vị trí: trình giữ chỗ đầu tiên nhận giá trị đầu tiên, giá trị thứ hai là giá trị thứ hai, v.v.

+1

'+ 1' - BTW , thuật ngữ chính xác cho điều này là nội suy chuỗi. –

+0

Cú pháp giống như 'printf' của C, rõ ràng. –

1
$num = 5; 
$location = 'tree'; 

$format = 'There are %d monkeys in the %s'; 
echo sprintf($format, $num, $location); 

Sẽ xuất: "Có 5 khỉ trên cây".

+1

Cảm ơn bạn đã chỉnh sửa, Ned. Tôi đã có bốn chỉnh sửa và nó vẫn không hoạt động. Markdown phải có điều sai lầm trong một giây. – David

+0

Đây là một câu trả lời siêu tốt xứng đáng được chú ý nhiều hơn. –

+0

Trực tiếp từ hướng dẫn sử dụng php :) –

3

%s là loại thông số sẽ được thay thế thành giá trị có giá trị (chuỗi) trong trường hợp %s.

Bên cạnh %s bạn có thể sử dụng khác specifiers, phổ biến nhất là dưới đây:

d - đối số được coi là một số nguyên, và được trình bày như một (đã ký) số thập phân.

f - đối số được coi là phao, và được trình bày dưới dạng số dấu phẩy động (vị trí nhận biết).

s - đối số được coi là và được hiển thị dưới dạng chuỗi.

Các vấn đề liên quan