Strings sprintf

(PHP 4, PHP 5, PHP 7, PHP 8)

sprintf — 형식이 지정된 문자열 반환


설명

sprintf(string $format, mixed ...$values): string

형식화 문자열 format에 따라 생성된 문자열을 반환합니다.


매개변수

format
형식 문자열은 결과 및 변환 사양에 직접 복사되는 일반 문자(% 제외)와 같은 0개 이상의 지시문으로 구성되며, 각각은 자체 매개변수를 가져옵니다.

변환 사양은 %[argnum$][flags][width][.precision]specifier 프로토타입을 따릅니다.

Argnum

변환에서 처리할 숫자 인수를 지정하기 위해 달러 기호 $가 뒤따르는 정수입니다.

Flags

Flag 설명
- 주어진 필드 너비 내에서 왼쪽 정렬. 오른쪽 맞춤이 기본값입니다.
+ 플러스 기호로 양수 접두사 +; 기본적으로 음수에만 음수 기호가 접두사로 붙습니다.
(space) 결과를 공백으로 채웁니다. 이것이 기본값입니다.
0 0이 있는 숫자만 왼쪽으로 채웁니다. s 지정자를 사용하면 0으로 오른쪽 채울 수도 있습니다.
'(char) 결과를 문자(char)로 채웁니다.
Width

이 변환의 결과로 생성되어야 하는 문자 수(최소)를 나타내는 정수입니다.

Precision

기간 . 그 뒤에 의미가 지정자에 따라 달라지는 정수가 옵니다.

  • e, E, fF 지정자의 경우: 소수점 뒤에 인쇄할 자릿수입니다(기본값은 6).
  • g, G, hH 지정자의 경우 인쇄할 최대 유효 자릿수입니다.
  • s 지정자의 경우: 문자열에 대한 최대 문자 제한을 설정하는 컷오프 포인트 역할을 합니다.

참고: 정밀도에 대한 명시적 값 없이 기간을 지정하면 0으로 간주됩니다.

참고: PHP_INT_MAX보다 큰 위치 지정자를 사용하려고 하면 경고가 생성됩니다.

Specifiers

Specifier 설명
% 리터럴 백분율 문자입니다. 인수가 필요하지 않습니다.
b 인수는 정수로 처리되고 이진수로 표시됩니다.
c 인수는 정수로 처리되고 해당 ASCII가 있는 문자로 표시됩니다.
d 인수는 정수로 처리되고 (부호 있는) 십진수로 표시됩니다.
e 인수는 과학적 표기법으로 처리됩니다(예: 1.2e+2).
E e 지정자와 비슷하지만 대문자를 사용합니다(예: 1.2E+2).
f 인수는 부동 소수점으로 처리되고 부동 소수점 숫자(로케일 인식)로 표시됩니다.
F 인수는 부동 소수점으로 처리되고 부동 소수점 숫자(로케일을 인식하지 않음)로 표시됩니다.
g 일반 형식.

0이 아닌 경우 P를 정밀도와 같게 하고 정밀도가 생략된 경우 6, 정밀도가 0인 경우 1로 설정합니다. 그런 다음 스타일 E를 사용한 변환의 지수가 X인 경우:

P > X ≥ −4인 경우 변환은 스타일 f 및 정밀도 P − (X + 1)로 수행됩니다. 그렇지 않으면 변환은 스타일 e 및 정밀도 P − 1로 수행됩니다.

G g 지정자와 비슷하지만 Ef를 사용합니다.
h g 지정자와 비슷하지만 F를 사용합니다. PHP 8.0.0부터 사용 가능합니다.
H g 지정자와 비슷하지만 EF를 사용합니다. PHP 8.0.0부터 사용 가능합니다.
o 수는 정수로 처리되고 8진수로 표시됩니다.
s 인수는 문자열로 처리되고 표시됩니다.
u 인수는 정수로 처리되고 부호 없는 십진수로 표시됩니다.
x 인수는 정수로 처리되고 16진수(소문자 포함)로 표시됩니다.
X 인수는 정수로 처리되고 16진수(대문자 포함)로 표시됩니다.

경고c 유형 지정자는 패딩 및 너비를 무시합니다.

경고 문자당 1바이트 이상이 필요한 문자 집합과 함께 문자열 및 너비 지정자의 조합을 사용하려고 하면 예기치 않은 결과가 발생할 수 있습니다.

변수는 지정자에 적합한 유형으로 강제 변환됩니다.

Type Handling

Type Specifiers
string s
int d, u, c, o, x, X, b
float e, E, f, F, g, G, h, H
values

반환 값

형식화 문자열 format에 따라 생성된 문자열을 반환합니다.


변경 로그

버전 설명
8.0.0 이 함수는 더 이상 실패 시 false를 반환하지 않습니다.

Examples

예제 #1 인수 스와핑

형식 문자열은 인수 번호 매기기/교체를 지원합니다.

                  
<?php
$num = 5;
$location = 'tree';

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

위의 예는 다음을 출력합니다.

There are 5 monkeys in the tree
                

그러나 일반적으로 국제화하고 다음과 같이 다시 작성하기 때문에 별도의 파일에 형식 문자열을 생성한다고 상상해보십시오.

                  
<?php
$format = 'The %s contains %d monkeys';
echo sprintf($format, $num, $location);
?>
                  
                

문제가 있습니다. 형식 문자열의 자리 표시자 순서가 코드의 인수 순서와 일치하지 않습니다. 코드를 그대로 두고 자리 표시자가 참조하는 인수를 형식 문자열에 표시하기만 하면 됩니다. 대신 다음과 같이 형식 문자열을 작성합니다.

                  
<?php
$format = 'The %2$s contains %1$d monkeys';
echo sprintf($format, $num, $location);
?>
                  
                

추가 이점은 코드에 더 많은 인수를 추가하지 않고도 자리 표시자를 반복할 수 있다는 것입니다.

                  
<?php
$format = 'The %2$s contains %1$d monkeys.
           That\'s a nice %2$s full of %1$d monkeys.';
echo sprintf($format, $num, $location);
?>
                  
                

인수 스와핑을 사용할 때 n$ 위치 지정자는 아래와 같이 백분율 기호(%) 바로 뒤에 와야 하며 다른 지정자 앞에 와야 합니다.

예제 #2 패딩 문자 지정

                  
<?php
echo sprintf("%'.9d\n", 123);
echo sprintf("%'.09d\n", 123);
?>
                  
                

위의 예는 다음을 출력합니다.

......123
000000123
                

예제 #3 다른 지정자와 위치 지정자

                  
<?php
$format = 'The %2$s contains %1$04d monkeys';
echo sprintf($format, $num, $location);
?>
                  
                

위의 예는 다음을 출력합니다.

The tree contains 0005 monkeys
                

예제 #4 sprintf(): 0으로 채워진 정수

                  
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
                  
                

예제 #5 sprintf(): 통화 형식 지정

                  
<?php
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
echo $money;
echo "\n";
$formatted = sprintf("%01.2f", $money);
echo $formatted;
?>
                  
                

위의 예는 다음을 출력합니다.

123.1
123.10
                

예제 #6 sprintf(): 과학적 표기법

                  
<?php
$number = 362525200;

echo sprintf("%.3e", $number);
?>
                  
                

위의 예는 다음을 출력합니다.

3.625e+8
                

기타

  • printf() - 형식이 지정된 문자열 출력
  • fprintf() - 트림에 형식이 지정된 문자열 쓰기
  • vprintf() - 형식이 지정된 문자열 출력
  • vsprintf() - 형식이 지정된 문자열 반환
  • vfprintf() - 스트림에 형식이 지정된 문자열 쓰기
  • sscanf() - 형식에 따라 문자열의 입력을 구문 분석합니다.
  • fscanf() - 형식에 따라 파일에서 입력을 구문 분석
  • number_format() - 그룹화된 천 단위로 숫자 서식 지정
  • date() - Unix 타임스탬프 형식 지정