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

Форматирование строк функцией sprintf в PHP
Раздел: Вывод данных
sprintf(string format [, mixed ...values]): string

Функция sprintf в PHP

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

Аргументы функции

Первый аргумент - строка формата, содержащая спецификаторы преобразования, начинающиеся с символа %. Последующие аргументы - значения, подставляемые вместо спецификаторов.

Спецификатор имеет структуру: %[символ_заполнения][-][ширина][.точность]тип.

Типы преобразований
  • %b - двоичное число
  • %c - символ по коду ASCII
  • %d - знаковое целое число
  • %e - научная нотация (нижний регистр)
  • %E - научная нотация (верхний регистр)
  • %f - число с плавающей точкой
  • %F - число с плавающей точкой (без локали)
  • %g - общий формат (короткий %e или %f)
  • %G - общий формат (короткий %E или %F)
  • %o - восьмеричное число
  • %s - строка
  • %u - беззнаковое целое число
  • %x - шестнадцатеричное число (нижний регистр)
  • %X - шестнадцатеричное число (верхний регистр)
  • %% - знак процента

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

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

Форматирование чисел:

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

Работа с дробными числами:

echo sprintf("Процент: %.2f%%", 45.6789);
Процент: 45.68%
Флаги и параметры

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

echo sprintf("%05d", 123);
00123

Выравнивание влево:

echo sprintf("%-10s", "текст");
текст      

Ширина и точность:

echo sprintf("%8.3f", 3.14159);
   3.142

Альтернативные функции PHP

Функция printf аналогична sprintf, но сразу выводит результат, не возвращая его. Подходит для прямой отправки данных в вывод.

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

number_format

Функция number_format форматирует числа с группировкой разрядов. Более специализирована для работы с числовыми представлениями, чем sprintf.

str_pad

Функция str_pad дополняет строку до указанной длины. Проще для задач заполнения, но менее гибкая.

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

Несоответствие количества аргументов
echo sprintf("%d %s", 42);
Warning: sprintf(): Too few arguments
Неправильный спецификатор типа
echo sprintf("%d", "текст");
0
Проблемы с локалью
setlocale(LC_NUMERIC, 'de_DE');
echo sprintf("%.2f", 1234.56);
1234,56 (зависит от настроек сервера)
Переполнение буфера
// Неявная ошибка при большой ширине
// может вызвать проблемы с памятью
echo sprintf("%1000000000f", 1.23);

Изменения в версиях PHP

PHP 8.0

При несоответствии количества аргументов теперь генерируется исключение ValueError. Ранее выдавалось предупреждение.

PHP 8.2

Устарели неявные преобразования чисел с плавающей точкой в целые с округлением. В sprintf теперь явное указание типа становится более важным.

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

Работа с порядком аргументов
Пример php
echo sprintf("%2\$s %1\$s", "первый", "второй");
второй первый
Форматирование денежных значений
Пример php
$sum = 1234.5678;
echo sprintf("Сумма: $%'.10.2f", $sum);
Сумма: $00001234.57
Шестнадцатеричное представление
Пример php
$color = 0xFF9933;
echo sprintf("Цвет: #%06X", $color);
Цвет: #FF9933
Бинарные данные
Пример php
echo sprintf("Бинарно: %b", 42);
Бинарно: 101010
Научная нотация
Пример php
echo sprintf("%.3e", 0.000123456);
1.235e-4
Комплексное форматирование
Пример php
$data = [5, 3.14159, "текст"];
echo sprintf("Число: %04d, Пи: %.3f, Строка: %10s", ...$data);
Число: 0005, Пи: 3.142, Строка:      текст

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

Sprintf в Python

Метод format и f-строки:

# Метод format
result = "Число: {:.2f}".format(45.6789)
# f-строка
value = 45.6789
result = f"Число: {value:.2f}"
Число: 45.68

Sprintf в Javascript

Метод toFixed и шаблонные строки:

// toFixed
let result = (45.6789).toFixed(2);
// Шаблонные строки
let value = 45.6789;
result = `Число: ${value.toFixed(2)}`;
Число: 45.68

Sprintf в MySQL

Функция FORMAT:

SELECT FORMAT(1234567.456, 2);
1,234,567.46

Sprintf в C

Функция snprintf:

char buffer[50];
int n = snprintf(buffer, 50, "Число: %d", 42);

PHP sprintf function comments

En
Sprintf Return a formatted string