W3docs

printf()

Функция PHP printf() выводит отформатированную строку. Узнайте синтаксис, спецификаторы формата и практические примеры.

Функция PHP printf() выводит строку, отформатированную по шаблону. В отличие от echo, который просто объединяет значения и выводит их как есть, printf() позволяет точно управлять тем, как отображается каждое значение — его шириной, количеством знаков после запятой, заполнением, знаком и системой счисления — путём вставки спецификаторов формата (заполнителей, таких как %s или %.2f) в строку формата. Это подходящий инструмент, когда важен вид вывода: выровненные таблицы, суммы с двумя знаками после запятой, идентификаторы с ведущими нулями или шестнадцатеричные коды цветов.

На этой странице рассматриваются синтаксис, структура спецификатора формата, наиболее распространённые преобразования с запускаемыми примерами и близкородственные функции того же семейства.

Синтаксис

printf(string $format, mixed ...$values): int
  • $format — строка-шаблон, содержащая обычный текст и один или несколько спецификаторов формата.
  • $values — значения, подставляемые в спецификаторы по порядку.
  • Возвращает количество выведенных символов (длину вывода), а не саму строку. printf() выводит данные непосредственно в поток вывода. Если нужно получить отформатированную строку вместо её вывода, используйте sprintf().

Простой пример

php— editable, runs on the server

%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 проще и быстрее.

Практика

Практика
Какова функция printf (или sprintf), упомянутых в связанном материале?
Какова функция printf (или sprintf), упомянутых в связанном материале?
Was this page helpful?