PHP

애니위즈 2010. 6. 21. 18:50

숫자나 문자열을 해당 형식에 맞춰 출력하고 싶을때 sprintf() 함수를 이용하면 쉽게 원하는 형식으로 출력이 가능합니다.

예) 년/월/일을 표시할 때 한자리수 숫자앞에 0을 붙여서 표현하고 싶을때

for($ii = 1; $ii <= 12; $ii++) {
echo $ii."월 ";
}

결과 : 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월

for($ii = 1; $ii <= 12; $ii++) {
echo sprintf('%02d', $ii)."월 ";
}

결과 : 01월 02월 03월 04월 05월 06월 07월 08월 09월 10월 11월 12월




string sprintf ( string format [, mixed args])


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

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

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


선택적인 패딩 지정어는 적합한 문자열의 크기를 얻기 위한 패딩에 사용하는 문자를 지정합니다. 이는 스페이스 문자나 0 (제로 문자)일 수 있습니다. 기본값은 스페이스로 채웁니다. 다른 패딩 문자는 작은 따옴표(')를 앞에 붙여서 지정할 수 있습니다. 아래의 예제를 참고하십시오.

선택적인 정렬 지정어는 결과를 왼쪽 정렬할지, 오른쪽 정렬할 지를 결정합니다. 기본값은 오른쪽 정렬입니다; 여기에 - 문자를 사용하면 왼쪽 정렬이 됩니다.

선택적인 수, 너비 지정어는 얼마나 많은 문자(최소한)가 결과에 들어갈지를 결정합니다.

선택적인 정밀도 지정어는 부동 소수점 실수에서 얼마나 많은 소수점 아래의 수를 표시할지를 결정합니다. 이 옵션은 float형 이외에는 영향을 주지 않습니다. (수를 포맷하는 다른 유용한 함수에는 number_format()이 존재합니다.)

형 지정어는 인자 데이터를 어떤 형으로 취급할지 결정합니다. 가능한 형은:


% - 퍼센트 문자. 인자는 필요하지 않습니다.
b - 인자를 정수로 취급하고, 2진수로 표현합니다.
c - 인자를 정수로 취급하고, ASCII 값에 해당하는 문자로 표현합니다.
d - 인자를 정수로 취급하고, (부호 있는) 10진수로 표현합니다.
u - 인자를 정수로 취급하고, 부호 없는 10진수로 표현합니다.
f - 인자를 float로 취급하고, 실수로 표현합니다.
o - 인자를 정수로 취급하고, 8진수로 표현합니다.
s - 인자를 문자열로 취급하고 표현합니다.
x - 인자를 정수로 취급하고 16진수(소문자 표시)로 표현합니다.
X - 인자를 정수로 취급하고, 16진수(대문자 표시)로 표현합니다.




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

예 1. 인자 교환

<?php
$format = "There are %d monkeys in the %s";
printf($format, $num, $location);
?>

이는 "There are 5 monkeys in the tree"를 출력할 것입니다. 그러나, 국제화를 위해서 포맷 문자열을 별도의 파일로 작성하고, 이것을 다음과 같이 재작성했다고 생각해봅시다:

예 2. 인자 교환

<?php
$format = "The %s contains %d monkeys";
printf($format, $num, $location);
?>

문제가 생겼습니다. 포맷 문자열에서의 순서와 코드에서 인자의 순서가 일치하지 않습니다. 여기서 코드를 수정하지 않고, 단순히 포맷 문자열에 어떤 인자를 가져올지를 지정할 수 있습니다. 포맷 문자열을 다음과 같이 작성하면 됩니다:

예 3. 인자 교환

<?php
$format = "The %2\$s contains %1\$d monkeys";
printf($format, $num, $location);
?>

코드에 많은 인자를 추가하지 않고도 반복해서 출력할 수 있다는 추가적인 장점이 존재합니다. 예를 들면:

예 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);
?>



참고: printf(), sscanf(), fscanf(), vsprintf(), number_format().

예제
예 5. sprintf(): 제로로 채운 정수

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

예 6. sprintf(): 통화 표현하기

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

 

웹프로그램개발 애니위즈 http://anywiz.co.kr