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
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!' "? –
nó sẽ xuất ra "Tivie là thế giới trên thế giới" kể từ str2 = thế giới, – Tivie
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] '? –