정의 및 사용 방법
- PHP 버전
- 4+
sprintf() 함수는
특정 형식의 데이터에 맞춰 문자열을 구성해서 반환하는 함수입니다.
이 함수는 템플릿처럼 문자열을 형식을 만들고 이 형식으로 문자열을 생성하는데 유용합니다.
sprintf(특정 형식, 특정 형식에 포함된 데이터_1, 특정 형식에 포함된 데이터_2, 특정 형식에 포함된 데이터_...)
기본 예제
/*
* 템플릿처럼 형식화할 문자열: "XX에는 XX권의 책이 있습니다."
*/
$txt = sprintf('%s에는 %u권의 책이 있습니다.', '도서관', 15);
// %s는 문자열 형식 => '도서관'
// %u는 10진수 형식 => 15
// 매개변수의 순서대로 각각 매칭됩니다.
echo $txt; // 특정 형식으로 생성된 문자열 반환
// '도서관에는 15권의 책이 있습니다.'
sprintf() 함수에서 매개변수는 순서대로 매칭됩니다.
즉, 포맷 문자열 내에 있는 각 포맷 지정자(%s, %u 등)가 뒤에 나오는 인수들과 순서대로 연결됩니다. 데이터 타입에 의한 자동 매칭은 일어나지 않으며, 포맷 지정자와 인수의 순서가 일치해야 합니다.
sprintf() 함수는 화면에 직접 출력하지 않고, 형식에 맞게 변환하여 반환합니다.
구문
sprintf(string $format, mixed ...$values): string
매개변수
$format
형식화할 문자열입니다.
이 문자열에는 0개 이상의 형식 지정자(format specifiers)가 포함되어 있으며, 이 형식 지정자에 맞게 뒤에 오는 값들이 변환됩니다.
형식 지정자는 %로 시작하며, 그 뒤에 데이터 유형을 나타내는 특별한 의미의 문자가 따라옵니다.
형식 지정자
다음은 많이 사용되는 형식 지정자입니다.
| 형식 지정자 | 설명 | 예제 | 출력 결과 |
|---|---|---|---|
%s |
문자열(string) | sprintf('이름: %s', 'Alice') |
'이름: Alice' |
%d |
정수(10진수, decimal) | sprintf('나이: %d', 30) |
'나이: 30' |
%f |
부동소수점 숫자(float) | sprintf('가격: %.2f', 19.99) |
'가격: 19.99' |
%u |
부호 없는 10진수(unsigned decimal number, 0보다 크거나 같은 수를 사용할 때) | sprintf('수량: %u', 10) |
'수량: 10' |
%e |
지수 표기법(소문자) | sprintf('지수 표기법: %e', 1234.56) |
'지수 표기법: 1.234560e+03' |
%E |
지수 표기법(소문자) | sprintf('지수 표기법: %E', 1234.56) |
'지수 표기법: 1.234560E+03' |
%c |
ASCII 값에 따른 문자( character) | sprintf('문자: %c', 65) |
'문자: A' |
%p |
포인터(PHP 7.0.0 이상) | sprintf('포인터: %p', $variable) |
'포인터: 0x...' |
위 표에서 언급된 것 이외에도 다른 형식 지정자가 존재합니다. php.net - Parameters를 참조하세요!
...$values
$format의 형식 문자열 내의 형식 지정자와 순서대로 일치하는 값들입니다.
반환 값
형식 문자열과 매개변수로 전달된 값들에 따라 형식화된 문자열을 반환합니다.
반환된 문자열은 형식 지정자에 의해 매개변수 값들이 적절하게 변환된 결과입니다.
활용 예제
sprintf() 함수는 문자열을 형식화하여 반환하는 데 매우 유용한 함수입니다. 여러 데이터를 특정 형식으로 변환해 문자열로 만들 때 활용할 수 있으며, 특히 반복적인 작업이나 다국어 지원, 템플릿 문자열 생성에 매우 적합합니다. 아래에 실전에서 사용할 수 있는 몇 가지 sprintf() 활용 예제를 소개합니다.
배열을 이용한 템플릿 활용 예제
이 예제에서는 sprintf() 함수를 활용하여 문자열의 형식을 템플릿으로 사용하고,
배열의 데이터를 반복적으로 처리하여 여러 항목의 정보를 형식화된 문자열로 출력하는 방법을 보여줍니다.
// 데이터 배열
$items = [
['quantity' => 10, 'city' => '서울'],
['quantity' => 5, 'city' => '부산'],
['quantity' => 12, 'city' => '인천']
];
// 템플릿 문자열 정의
$template = '%s 도서관에는 %u권의 책이 있습니다.';
// 배열의 각 항목을 형식화하여 출력
foreach ($items as $item) {
$formatted_string = sprintf($template, $item['city'], $item['quantity']);
echo $formatted_string;
}
// 결과:
// '서울 도서관에는 10권의 책이 있습니다.'
// '부산 도서관에는 5권의 책이 있습니다.'
// '인천 도서관에는 12권의 책이 있습니다.'
코드 부연설명
foreach() 반복문은 배열이나 객체를 순회해서 반복으로 처리할 때 사용하는 대표적인 구문입니다.
배열 데이터를 이용한 형식화
배열의 데이터를 반복 처리하면서 sprintf()를 활용해 각 항목의 정보를 형식화된 문자열로 출력하는 예제입니다.
// 데이터 배열
$books = [
['title' => 'PHP 프로그래밍', 'author' => '김철수', 'copies' => 3],
['title' => 'JavaScript 고급', 'author' => '이영희', 'copies' => 5],
['title' => '데이터베이스 설계', 'author' => '박지훈', 'copies' => 2]
];
// 템플릿 문자열 정의
$template = '도서 제목: %s, 저자: %s, 남은 수량: %u권';
// 배열의 각 항목을 형식화하여 출력
foreach ($books as $book) {
$formattedString = sprintf($template, $book['title'], $book['author'], $book['copies']);
echo $formattedString;
}
// 결과:
// 도서 제목: PHP 프로그래밍, 저자: 김철수, 남은 수량: 3권
// 도서 제목: JavaScript 고급, 저자: 이영희, 남은 수량: 5권
// 도서 제목: 데이터베이스 설계, 저자: 박지훈, 남은 수량: 2권
이 예제는 도서 정보가 담긴 배열을 순회하면서 각 도서의 제목, 저자, 남은 수량을 지정된 형식으로 출력합니다.
JSON 데이터를 이용한 형식화
JSON 데이터를 받아와 sprintf()로 형식화하는 예제입니다. API 응답 등을 처리할 때 유용합니다.
// JSON 데이터
$jsonData = '{
"name": "김철수",
"age": 30,
"city": "서울"
}';
// JSON 데이터를 배열로 변환
$user = json_decode($jsonData, true);
// 형식화된 문자열 생성
$formattedString = sprintf('이름: %s, 나이: %u, 도시: %s', $user['name'], $user['age'], $user['city']);
echo $formattedString;
// 결과: 이름: 김철수, 나이: 30, 도시: 서울
이 예제에서는 JSON 데이터를 받아와 형식 지정자를 사용해 사람이 읽기 쉬운 형식으로 데이터를 출력합니다.
다국어 번역에 이용하는 예제
다국어 지원 시, sprintf()를 사용해 텍스트를 동적으로 변환하는 데 활용할 수 있습니다.
하나의 코드로 여러 언어에 맞춰 문자열을 생성하는 것이 실전에서 유용하게 사용될 수 있습니다.
그러면 영어와 한글 두 가지 템플릿을 사용하는 예제 코드를 보여드리겠습니다.
// 다국어 번역 템플릿
$templates = [
'en' => 'Hello %s, welcome to %s!',
'ko' => '%s님, %s에 오신 것을 환영합니다!'
];
// 다국어 국가 이름
$countries = [
'en' => 'South Korea',
'ko' => '한국'
];
// 사용자 데이터
$name = 'Alice';
// 언어 설정(예: 영어와 한글)
$language = 'ko'; // 'en' 또는 'ko'
// 선택된 언어의 템플릿과 국가명을 사용해 형식화된 문자열 생성
$welcomeMessage = sprintf($templates[$language], $name, $countries[$language]);
echo $welcomeMessage;
// 결과 (ko): Alice님, 한국에 오신 것을 환영합니다!
// 결과 (en): Hello Alice, welcome to South
이렇게 하면 동일한 코드로 여러 언어를 지원할 수 있고, 각 언어에 맞는 템플릿을 손쉽게 관리할 수 있습니다.