Printf: примеры (PHP)

Использование printf для форматированного вывода в PHP
Раздел: Вывод данных
printf(string $format, mixed ...$values): int

Описание функции printf

Функция printf в PHP применяется для форматированного вывода строк. Она выводит данные напрямую в поток вывода, обычно в браузер или консоль. Эта функция используется, когда требуется строгий контроль над форматированием текста, например, для вывода чисел с определённым количеством знаков после запятой, выравнивания текста или подстановки значений по шаблону.

Синтаксис и аргументы

Синтаксис функции: printf(string $format, mixed ...$values): int.

  • $format - строка формата, содержащая обычный текст и спецификаторы преобразования, которые начинаются с символа процента (%).
  • ...$values - переменное количество аргументов, значения которых подставляются вместо спецификаторов в строке формата.
Спецификаторы формата

Основные спецификаторы: %b (двоичное число), %c (символ), %d (целое число), %e (научная нотация), %f (число с плавающей точкой), %o (восьмеричное), %s (строка), %u (беззнаковое целое), %x/%X (шестнадцатеричное). Спецификаторы могут включать флаги, ширину, точность и тип.

Примеры использования

Базовые примеры

Вывод строки с целым числом:

printf("Число: %d", 42);
Число: 42

Вывод нескольких значений:

printf("Координаты: x=%d, y=%d", 10, 20);
Координаты: x=10, y=20
Форматирование чисел

Число с плавающей точкой:

printf("Процент: %.2f%%", 45.6789);
Процент: 45.68%

Заполнение нулями:

printf("Номер: %05d", 7);
Номер: 00007
Флаги форматирования

Выравнивание по левому краю:

printf("[%-10s]", "текст");
[текст     ]

Вывод знака для положительных чисел:

printf("%+d", 15);
+15

Похожие функции в PHP

Функция sprintf идентична printf, но возвращает отформатированную строку вместо вывода. Её применяют, когда результат нужен для дальнейшей обработки.

vprintf и vsprintf

Функции vprintf и vsprintf принимают массив значений вместо переменного числа аргументов. Это удобно при динамическом формировании аргументов.

fprintf

Функция fprintf выводит результат в указанный поток, например, в файл. Она полезна для логирования.

Рекомендации по выбору

printf используют для прямого вывода. sprintf выбирают при необходимости манипуляций со строкой. fprintf применяют для записи в файлы.

Типичные ошибки

Несоответствие количества аргументов

Если спецификаторов больше, чем аргументов, выводится предупреждение.

printf("%d %d", 1);
Warning: printf(): Too few arguments
Некорректные спецификаторы

Использование неизвестного спецификатора приводит к выводу символа как есть.

printf("%q", "test");
%q
Проблемы с локалью

Для форматирования чисел с десятичной точкой зависит от локали. В некоторых локалях используется запятая.

setlocale(LC_NUMERIC, 'ru_RU'); printf("%.2f", 1.5);
1,50

Изменения в PHP 8

В PHP 8.0 были изменены способы обработки несоответствия аргументов. Ранее некорректное количество аргументов могло приводить к неопределённому поведению, теперь же в большинстве случаев вызывается ошибка уровня Warning. Также улучшена обработка спецификаторов для чисел с плавающей точкой.

Расширенные примеры

Форматирование денежных значений
Пример php
printf("Сумма: $%.2f", 1234.567);
Сумма: $1234.57
Шестнадцатеричный вывод с префиксом
Пример php
printf("Цвет: #%06X", 0xFFA500);
Цвет: #FFA500
Форматирование таблицы
Пример php
printf("%'-20s%'10d\n", "Итог:", 1000);
Итог:----------------       1000
Использование позиционных аргументов

Порядок вывода аргументов можно изменять.

Пример php
printf("%2\$s %1\$s", "мир", "Привет");
Привет мир
Спецификатор для вывода символа по коду
Пример php
printf("Символ: %c", 65);
Символ: A
Научная нотация
Пример php
printf("%.2e", 0.000123);
1.23e-4
Комбинирование флагов
Пример php
printf("%'*10.4f", 12.345678);
***12.3457

Аналоги в других языках

Printf в Python

В Python используют метод format строки или f-строки (Python 3.6+).

print("Число: {}".format(42))
Число: 42
value = 45.6789; print(f"Процент: {value:.2f}%")
Процент: 45.68%

Printf в Javascript

В JavaScript нет прямой аналогии, но есть шаблонные строки.

console.log(`Координаты: x=${10}, y=${20}`);
Координаты: x=10, y=20

Printf в MySQL

В MySQL есть функция FORMAT для чисел и CONCAT для строк.

SELECT FORMAT(45.6789, 2);
45.68
C/C++

В языке C функция printf практически идентична PHP, но со строгой типизацией аргументов.

PHP printf function comments

En
Printf Output a formatted string