2013-11-28 17 views
5

Tôi đang cố gắng sử dụng cùng một giá trị ở những vị trí khác nhau khi sử dụng sprintf, nhưng không thành công.sprintf sử dụng cùng một giá trị nhiều lần

<?php 

$score = 50; 
$percent = 10; 

$str = "Hello: You scored %s (%s%%). Your score is %2$s %%"; //Problem is here %2$s 

echo sprintf($str,$score,$percent); 
?> 

tôi nhận được lỗi này: Notice: Undefined variable: s in C:\web\apache\htdocs\sprintf.php on line 6 Warning: sprintf(): Too few arguments in C:\web\apache\htdocs\sprintf.php on line 8

Trả lời

6

Sử dụng dấu nháy đơn thay vì dấu ngoặc kép:

$str = 'Hello: You scored %s (%s%%). Your score is %2$s %%'; 

biến được mở rộng bên trong dấu ngoặc kép, vì vậy $s được coi là một biến, không phải là một tùy chọn định dạng.

Nếu bạn muốn sử dụng dấu ngoặc kép, bạn có thể thoát khỏi dấu đô la:

$str = "Hello: You scored %s (%s%%). Your score is %2\$s %%"; 
+0

Nhưng tôi cần những dấu nháy kép đó. Họ đang ở đó với một mục đích. – jmenezes

+0

Ok. Tôi đặt một '\' trước '$' và nó bây giờ là tốt. – jmenezes

+0

Bạn cũng có thể sử dụng nối thay vì nội suy để thực hiện thay thế biến trong chuỗi. – Barmar

1

Một $ bên trong chuỗi trích dẫn kép được sử dụng để suy biến, PHP đang tìm kiếm các biến $s đây. Sử dụng chuỗi đơn trích dẫn và số tất cả các đối số của bạn trong khi bạn đang ở đó:

'Hello: You scored %1$s (%1$s%%). Your score is %2$s %%' 
+0

tôi cần những dấu ngoặc kép. Cũng có các biến trong đó. Không hiển thị ở đây, nhưng trong kịch bản. – jmenezes

+0

Vậy thì bạn cần phải thoát khỏi '$' s, nghĩa là chữ '$' s: '" ...% 1 \ $ s ... "'. – deceze

+0

Ah! Vâng! Tôi đã làm điều đó. Cảm ơn – jmenezes

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