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 форматирует числа с группировкой разрядов. Более специализирована для работы с числовыми представлениями, чем sprintf.
Функция 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
При несоответствии количества аргументов теперь генерируется исключение ValueError. Ранее выдавалось предупреждение.
Устарели неявные преобразования чисел с плавающей точкой в целые с округлением. В sprintf теперь явное указание типа становится более важным.
Расширенные примеры
echo sprintf("%2\$s %1\$s", "первый", "второй");второй первый
$sum = 1234.5678;
echo sprintf("Сумма: $%'.10.2f", $sum);Сумма: $00001234.57
$color = 0xFF9933;
echo sprintf("Цвет: #%06X", $color);Цвет: #FF9933
echo sprintf("Бинарно: %b", 42);Бинарно: 101010
echo sprintf("%.3e", 0.000123456);1.235e-4
$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);