2012-07-24 2 views

답변

37

% 기호가 앞에 오는 printf 또는 sprintf 문자 앞에는 자리 표시 자 (또는 토큰)가 있습니다. 인수로 전달 된 변수로 대체됩니다.

예 :

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

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

이 출력됩니다 :

Tivie는 세계 최고입니다!

참고 : 더 플레이스 홀더가 있습니다 (% s의 문자열 12 월 번호 등을위한 % d를 ...)


주문 :

당신이 통과하는 순서를 인수가 중요합니다. 당신이

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

으로 $의 STR2와 $ str1과를 전환하는 경우는

는 "Tivie 최고의 세계입니다!"인쇄됩니다

당신은, 그러나,이 같은 인수의 읽기 순서를 변경할 수 있습니다 정확하게 문장을 인쇄합니다

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

합니다.


또한 PHP는 동적 언어이므로 명시 적 유형 정의가 필요하지 않으며 지원됩니다. 즉, 필요에 따라 변수 유형을 저글링합니다. 스프린트에서 숫자 자리 표시 자 (% d)에 "문자열"을 전달하면 해당 문자열이 이상한 결과를 낼 수있는 숫자 (int, float ...)로 변환된다는 것을 의미합니다. 다음은 예입니다 :

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

이 내가 PHPdocs

+0

네드의 설명과 함께 당신의 모범이 상당히 견고한 답을 찾는다 고 생각합니다. 질문 :'sprintf ('tivie가 % s!, $ str2, $ str2에 % s입니다.)'라고 쓰면 "티비가 세계 최고입니다!" –

+1

str2 = world, – Tivie

+0

오타 (typo 's)가 있기 때문에 "Tivie is the world is world"가 출력됩니다. 나는 그것에서 웃음을 얻었다. 그래서'% strn'은 말하기 위해'% s [n]'의 값을 반환합니까? 같은 표기법으로'% s % s'은'% s [0] % s [1]'의 값을 반환합니까? –

9

printf에서 %s 문자열에 삽입 될 데이터를위한 자리이다. printf에 대한 추가 인수는 삽입 할 값입니다. 첫 번째 자리 표시자는 첫 번째 값을 가져오고 두 번째 값은 두 번째 값을 가져 오는 등의 방식으로 자리 표시 자와 연결됩니다.

+1

에서 내 0

더 읽기 2 초콜릿 (들)이

를 인쇄 할'+ 1' - BTW , 올바른 용어는 문자열 보간입니다. –

+0

C의'printf'와 같은 구문입니다. –

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

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

출력 내용 : "트리에 5 마리의 원숭이가 있습니다."

+1

편집 해 주셔서 감사합니다. Ned. 나는 네 번의 편집을했고, 여전히 효과가 없었습니다. Markdown은 1 초 동안 엉망이되어 있어야합니다. – David

+0

더 많은 관심을 기울여야 할 슈퍼 좋은 대답입니다. –

+0

PHP 매뉴얼에서 직접보기 :) –

3

%s%s의 경우 귀중한 값 (문자열)으로 대체 될 유형 지정자입니다. - 인수를 정수로 취급하고, (부호) 진수로 표현합니다

D :

%s 외에 아래있는 가장 인기있는 다른 specifiers 사용할 수 있습니다.

f - 인수가 부동 소수점으로 처리되고 부동 소수점 숫자 (로캘 인식)로 표시됩니다.

s - 인수는 문자열로 취급되어 문자열로 표시됩니다.

관련 문제