update : 2015.11.03
php.shukuma.com

검색:
 
 
형식화한 문자열을 반환

sprintf

(PHP 4, PHP 5)

sprintf형식화한 문자열을 반환

설명

string sprintf ( string $format [, mixed $args [, mixed $... ]] )

포맷 문자열 format에 따라 생성한 문자열을 반환합니다.

인수

format

포맷 문자열은 0개 이상의 지시어를 조합합니다: 일반 문자는 (%을 제외하고) 결과에 그대로 복사하고, 변환 특정어는 각각의 인수로 교체한 결과를 가집니다. 이는 sprintf()printf()에 모두 적용됩니다.

각각의 변환 특정어는 퍼센트 기호(%)에 다음의 요소들이 붙어서 구성됩니다:

  1. 선택적인 부호 지정어는 숫자에 부호(-나 +)를 강제합니다. 기본값은 숫자가 음수일때만 - 부호를 사용합니다. 이 지정어는 양수일때도 + 부호를 붙이고, PHP 4.3.0에서 추가되었습니다.
  2. 선택적인 패딩 지정어는 적합한 문자열의 크기를 얻기 위한 패딩에 사용하는 문자를 지정합니다. 이는 스페이스 문자나 0 (제로 문자)일 수 있습니다. 기본값은 스페이스로 채웁니다. 다른 패딩 문자는 작은 따옴표(')를 앞에 붙여서 지정할 수 있습니다. 아래의 예제를 참고하십시오.
  3. 선택적인 정렬 지정어는 결과를 왼쪽 정렬할지, 오른쪽 정렬할 지를 결정합니다. 기본값은 오른쪽 정렬입니다; 여기에 - 문자를 사용하면 왼쪽 정렬이 됩니다.
  4. 선택적인 수, 너비 지정어는 얼마나 많은 문자(최소한)가 결과에 들어갈지를 결정합니다.
  5. 선택적인 정밀도 지정어는 부동소수점 수에서 얼마나 많은 소수점 아래의 수를 표시할지를 결정합니다. 이 지정어를 문자열에 사용하면, 잘라내는 점으로 작동하여 문자열의 최대 문자수를 제한합니다.
  6. 형 지정어는 인수 데이터를 어떤 형으로 취급할지 결정합니다. 가능한 형은:

    • % - 퍼센트 문자. 인수는 필요하지 않습니다.
    • b - 인수를 정수로 취급하고, 2진수로 표현합니다.
    • c - 인수를 정수로 취급하고, 아스키 값에 해당하는 문자로 표현합니다.
    • d - 인수를 정수로 취급하고, (부호 있는) 10진수로 표현합니다.
    • e - 인수를 과학 형식으로 취급합니다. (예. 1.2e+2) 정밀도 지정어는 PHP 5.2.1부터 소수점 아래 자리수를 정합니다. 이전 버전에서는 유효숫자의 갯수(하나 적음)로 취급했었습니다.
    • u - 인수를 정수로 취급하고, 부호 없는 10진수로 표현합니다.
    • f - 인수를 소수로 취급하고, 부동소수점 수로 표현합니다. (로케일 관련)
    • F - 인수를 소수로 취급하고, 부동소수점 수로 표현합니다. (로케일 무관) PHP 4.3.10과 PHP 5.0.3부터 사용할 수 있습니다.
    • o - 인수를 정수로 취급하고, 8진수로 표현합니다.
    • s - 인수를 문자열로 취급하고 표현합니다.
    • x - 인수를 정수로 취급하고 16진수(소문자 표시)로 표현합니다.
    • X - 인수를 정수로 취급하고, 16진수(대문자 표시)로 표현합니다.

포맷 문자열은 인수 넘버링/교환을 지원합니다. 다음은 예제입니다:

Example #1 인수 교환

<?php
$format 
= ;There are %d monkeys in the %s';
printf($format, $num, $location);
?>
이는 "There are 5 monkeys in the tree"를 출력할 것입니다. 그러나, 국제화를 위해서 포맷 문자열을 별도의 파일로 작성하고, 이것을 다음처럼 재작성했다고 생각해봅시다:

Example #2 인수 교환

<?php
$format 
'The %s contains %d monkeys';
printf($format$num$location);
?>
문제가 생겼습니다. 포맷 문자열에서의 순서와 코드에서 인수의 순서가 일치하지 않습니다. 여기서 코드를 수정하지 않고, 단순히 포맷 문자열에 어떤 인수를 가져올지를 지정할 수 있습니다. 포맷 문자열을 다음과 같이 작성하면 됩니다:

Example #3 인수 교환

<?php
$format 
'The %2$s contains %1$d monkeys';
printf($format$num$location);
?>
코드에 많은 인수를 추가하지 않고도 반복해서 출력할 수 있다는 추가적인 장점이 존재합니다. 예를 들면:

Example #4 인수 교환

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

args

...

반환값

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

변경점

버전 설명
4.0.6 인수 넘버링/교환 추가.

예제

Example #5 printf(): 다양한 예제

<?php
$n 
=  43951789;
$u = -43951789;
$c 65// 아스키 65는 'A'

// 이중 %%에 주목, '%' 문자를 출력합니다.
printf("%%b = '%b'\n"$n); // 2진 표현
printf("%%c = '%c'\n"$c); // 아스키 문자 출력, chr() 함수와 동일
printf("%%d = '%d'\n"$n); // 표준 정수
printf("%%e = '%e'\n"$n); // 과학 표현
printf("%%u = '%u'\n"$n); // 양의 정수에 대한 부호 없는 정수 표현
printf("%%u = '%u'\n"$u); // 음의 정수에 대한 부호 없는 정수 표현
printf("%%f = '%f'\n"$n); // 부동소수점 표현
printf("%%o = '%o'\n"$n); // 8진 표현
printf("%%s = '%s'\n"$n); // 문자열 표현
printf("%%x = '%x'\n"$n); // 16진 표현 (소문자)
printf("%%X = '%X'\n"$n); // 16진 표현 (대문자)

printf("%%+d = '%+d'\n"$n); // 양의 정수에 대한 부호지정어
printf("%%+d = '%+d'\n"$u); // 음의 정수에 대한 부호지정어
?>

위 예제의 출력:

%b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%u = '43951789'
%u = '4251015507'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'

Example #6 printf(): 문자열 지정어

<?php
$s 
'monkey';
$t 'many monkeys';

printf("[%s]\n",      $s); // 표준 문자열 출력
printf("[%10s]\n"     $s); // 공백으로 오른쪽 정렬
printf("[%-10s]\n",   $s); // 공백으로 왼쪽 정렬
printf("[%010s]\n",   $s); // 0 채우기도 문자열에 작동
printf("[%'#10s]\n",  $s); // 사용자 채우기 문자 '#' 사용
printf("[%10.10s]\n"$t); // 왼쪽 정렬이지만 10문자로 자름
?>

위 예제의 출력:

[monkey]
[    monkey]
[monkey    ]
[0000monkey]
[####monkey]
[many monke]

Example #7 sprintf(): 0으로 채운 정수

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

Example #8 sprintf(): 통화 표현하기

<?php
$money1 
68.75;
$money2 54.35;
$money $money1 $money2;
// echo $money 는 "123.1"를 출력합니다;
$formatted sprintf("%01.2f"$money);
// echo $formatted 는 "123.10"를 출력합니다.
?>

Example #9 sprintf(): 과학 표현

<?php
$number 
362525200;

echo 
sprintf("%.3e"$number); // 3.625e+8 출력
?>

참고

  • printf() - 형식화한 문자열을 출력
  • sscanf() - 문자열을 형식에 따라 해석
  • fscanf() - Parses input from a file according to a format
  • vsprintf() - Return a formatted string
  • number_format() - Format a number with grouped thousands