printf()
Функция PHP printf() выводит отформатированную строку. Узнайте синтаксис, спецификаторы формата и практические примеры.
Функция PHP printf() выводит строку, отформатированную по шаблону. В отличие от echo, который просто объединяет значения и выводит их как есть, printf() позволяет точно управлять тем, как отображается каждое значение — его шириной, количеством знаков после запятой, заполнением, знаком и системой счисления — путём вставки спецификаторов формата (заполнителей, таких как %s или %.2f) в строку формата. Это подходящий инструмент, когда важен вид вывода: выровненные таблицы, суммы с двумя знаками после запятой, идентификаторы с ведущими нулями или шестнадцатеричные коды цветов.
На этой странице рассматриваются синтаксис, структура спецификатора формата, наиболее распространённые преобразования с запускаемыми примерами и близкородственные функции того же семейства.
Синтаксис
printf(string $format, mixed ...$values): int$format— строка-шаблон, содержащая обычный текст и один или несколько спецификаторов формата.$values— значения, подставляемые в спецификаторы по порядку.- Возвращает количество выведенных символов (длину вывода), а не саму строку.
printf()выводит данные непосредственно в поток вывода. Если нужно получить отформатированную строку вместо её вывода, используйтеsprintf().
Простой пример
%s заменяется первым аргументом ($name), отформатированным как строка, а %d — вторым ($age), отформатированным как знаковое целое число. Вывод:
My name is John Doe and I am 35 years old.Структура спецификатора формата
Каждый спецификатор начинается с % и может содержать необязательные части в следующем порядке:
%[argnum$][flags][width][.precision]specifier- flags — например,
0(заполнение нулями),-(выравнивание по левому краю),+(всегда показывать знак),' '(пробел заполняет указанным символом). - width — минимальное количество символов, занимаемое полем.
- .precision — для чисел с плавающей точкой — количество цифр после десятичной запятой; для строк — максимальная длина.
- specifier — тип преобразования (см. ниже).
Для вывода символа процента в буквальном виде экранируйте его как %%.
Распространённые спецификаторы преобразования
| Спецификатор | Преобразует аргумент в |
|---|---|
%s | строку |
%d | знаковое десятичное целое число |
%f | число с плавающей точкой |
%b | двоичное число |
%o | восьмеричное число |
%x / %X | шестнадцатеричное в нижнем / верхнем регистре |
%e | научная нотация |
%% | символ % в буквальном виде |
Ширина, точность и заполнение
Именно здесь printf() демонстрирует своё преимущество. Пример ниже форматирует цену с двумя знаками после запятой, дополняет идентификатор нулями до 5 цифр и выводит число как шестнадцатеричный код цвета:
<?php
$price = 7.5;
$id = 42;
$color = 16711680; // red
printf("Price: $%.2f\n", $price);
printf("Order ID: %05d\n", $id);
printf("Color: #%06X\n", $color);
?>Вывод:
Price: $7.50
Order ID: 00042
Color: #FF0000%.2f задаёт ровно два знака после запятой, %05d дополняет целое число нулями до ширины 5, а %06X генерирует шестнадцатеричное число в верхнем регистре, дополненное до 6 цифр.
Подстановка аргументов
Спецификатор может указывать, какой аргумент использовать, с помощью n$, что позволяет повторно использовать значение или менять порядок аргументов без изменения их списка — удобно для переводимых строк, где порядок слов отличается в зависимости от языка:
<?php
printf('%1$s likes %2$s. %2$s likes %1$s too.', 'Ann', 'tea');
?>Вывод:
Ann likes tea. tea likes Ann too.Семейство функций printf
printf() относится к семейству функций, использующих одинаковый синтаксис формата, но отличающихся тем, что они делают с результатом:
sprintf()— возвращает отформатированную строку вместо её вывода. Используйте, когда нужно сохранить или дополнительно обработать результат.vprintf()— аналогprintf(), но принимает значения в виде одного массива (vprintf($format, $args)), удобно, когда аргументы уже находятся в массиве.fprintf()— записывает отформатированную строку в поток/дескриптор файла, а не в стандартный вывод.
Для форматирования чисел с учётом локали (разделители тысяч, валюта) используйте number_format().
Когда использовать
Используйте printf() (или sprintf()), когда важен вид вывода: выровненные столбцы, деньги с фиксированным числом знаков, идентификаторы с ведущими нулями или генерация строк вроде шестнадцатеричных кодов цветов и URL. Для простого вывода, где форматирование не важно, echo проще и быстрее.