sprintf

(PHP 4, PHP 5, PHP 7, PHP 8)

sprintf — Повертає відформатований рядок

Опис

sprintf(string $format, mixed ...$values): string

Возвращает строку, созданную с использованием строки форматаformat

Список параметрів

format

Рядок формату складається з нуля або більше директив: звичайні символи (за винятком %), які просто виводяться без зміни та специфікатори перетворення, кожен із яких вимагає передачі свого параметра.

Специфікатори перетворення мають такий формат: %[argnum$][flags][width][.precision]specifier

Argnum

Ціло число, за яким слідує знак долара $, щоб вказати, який числовий аргумент обробляти під час перетворення.

Прапори

ФлагОпис
-Вирівнювання по лівому краю в межах заданої ширини поля; За умовчанням вирівнювання відбувається праворуч.
+Друкує плюс + у не негативних чисел; За замовчуванням знак друкується лише у негативних чисел.
(space)Доповнює результат пробілами. Це стандартна поведінка.
Доповнює числа нулями (тільки зліва). Зі специфікатором s також може доповнювати нулями праворуч.
'(char)Доповнює результат символом (char).
Ширина

Або ціле число, що вказує, скільки символів (мінімум) має вийти в результаті перетворення, або *Если указано значение*ширина задається як додаткове ціле значення, що передує значенню, відформатованому специфікатором.

Точність

Крапка , з наступним цілим числом, або *значення якого залежить від специфікатора:

  • Для специфікаторівe E fиF: задає кількість цифр після десяткової коми (за замовчуванням 6).
  • Для специфікаторівg,G hиH: задає максимальне значення значущих цифр.
  • Для специфікатораs: визначає обмеження максимальної кількості символів у рядку, які будуть виведені.

Зауваження: Якщо вказана точка без наступного значення точності, то точність буде вважатися 0. Якщо вказано значення *, точність задається як додаткове значення, що передує значенню, відформатованому специфікатором.

Специфікатори

СпецификаторОпис
%Відсоток символ. Аргументи не потрібні.
bАргумент сприймається як ціле число і друкується у бінарному поданні.
cАргумент розглядається як ціле число і друкується як символ таблиці ASCII з відповідним кодом.
dАргумент сприймається як ціле число і друкується як ціле число зі знаком.
eАргумент вважається за число у науковій нотації (тобто 1.2e+2).
EАналогічно специфікатору e, але використовує великі символи (тобто 1.2E+2).
fАргумент вважається за число з точкою, що плаває (з урахуванням локалі).
FАргумент вважається за число з точкою, що плаває (без урахування локалі).
g
Загальний формат.

Нехай P дорівнює точності, якщо вона не дорівнює нулю, 6 якщо точність не задана і 1, якщо точність задана як 0. Тоді, якщо перетворення зі стилем "E" матиме показник ступеня X:

Якщо P > X ≥ -4, перетворення буде в стилі "f" і точність буде P - (X + 1). У протилежному випадку перетворення буде в стилі "e" і точність буде P − 1.

G | Аналогічно специфікатору g, але використовує Eиf. h | Аналогічно специфікатору g, але використовує FДоступен с PHP 8.0.0. | |H | Аналогічно специфікатору g, але використовує EиFДоступен с PHP 8.0.0. | |o | Аргумент сприймається як ціле число і друкується у вісімковому поданні. | | s | Аргумент розглядається та друкується як рядок. | | u | Аргумент сприймається як ціле число і друкується як беззнакове ціле число. | | x | Аргумент розглядається як ціле число і друкується у шістнадцятковому поданні (літери будуть у нижньому регістрі). | | X | Аргумент розглядається як ціле число і друкується у шістнадцятковому поданні (літери будуть у верхньому регістрі). |

Увага

Специфікатор c ігнорує значення ширини та доповнення

Увага

Спроба використовувати специфікатори із зазначенням ширини для рядка в багатобайтовому кодуванні може призвести до несподіваних результатів.

Змінні будуть приведені до відповідного для специфікатора типу:

Обробка типів

ТипСпецификатор
strings
intducoxXb
floateEfFgGhH

values

Значення, що повертаються

Повертає рядок, відформатований відповідно до формату format

Помилки

Починаючи з PHP 8.0.0, якщо кількість аргументів дорівнює нулю, викидається виняток ValueError. До PHP 8.0.0 натомість видавалася помилка рівня E_WARNING

Починаючи з PHP 8.0.0, якщо [width] менше нуля чи більше PHP_INT_MAX, викидається виняток ValueError. До PHP 8.0.0 натомість видавалася помилка рівня E_WARNING

Починаючи з PHP 8.0.0, якщо [precision] менше нуля чи більше PHP_INT_MAX, викидається виняток ValueError. До PHP 8.0.0 натомість видавалася помилка рівня E_WARNING

Починаючи з PHP 8.0.0, якщо аргументів встановлено менше, ніж потрібно, викидається виняток ArgumentCountError. До PHP 8.0.0 натомість видавалася помилка рівня E_WARNING

список змін

ВерсияОпис
8.0.0Функція більше не повертає **false**в случае возникновения ошибки.
8.0.0Викидає виняток ValueErrorякщо кількість аргументів дорівнює нулю; раніше функція видавала помилку рівня E_WARNING
8.0.0Викидає виняток ValueError, якщо [width] менше нуля чи більше PHP_INT_MAX; раніше функція видавала помилку рівня E_WARNING
8.0.0Викидає виняток ValueError, якщо [precision] менше нуля чи більше PHP_INT_MAX; раніше функція видавала помилку рівня E_WARNING
8.0.0Викидає виняток ArgumentCountErrorякщо аргументів задано менше, ніж потрібно; раніше функція видавала помилку рівня E_WARNING

Приклади

Приклад #1 Argument swapping

Рядок формату підтримує нумерацію та перемішування аргументів.

Loading...

Результат виконання наведеного прикладу:

There are 5 monkeys in the tree

Тепер уявімо, що рядок форматування задається у сторонньому файлі. Це звичайна практика за необхідності підтримки кількох мов. Уявімо, що рядок був переписаний таким чином:

Loading...

Упс! У нас проблема – порядок специфікаторів перестав відповідати порядку аргументів. Так як нам дуже не хочеться змінювати код щоразу, коли змінюється формат рядка, то ми можемо використовувати нумеровані аргументи:

Loading...

Додатковим приємним моментом є те, що ми можемо використовувати один параметр для кількох підстановок.

Loading...

При використанні нумерованих аргументів, специфікатор позиції n$должен стоять сразу же за символом процента (%), до будь-якого іншого специфікатора, як показано нижче.

Приклад #2 Використання символу заповнення

Loading...

Результат виконання наведеного прикладу:

......123
000000123

Приклад #3 Специфікатор позиції у комбінації з іншими специфікаторами

Loading...

Результат виконання наведеного прикладу:

The tree contains 0005 monkeys

Приклад #4sprintf(): ціле з лідируючими нулями

Loading...

Приклад #5sprintf(): форматування грошових одиниць

Loading...

Результат виконання наведеного прикладу:

123.1
123.10

Приклад #6sprintf(): наукова нотація

Loading...

Результат виконання наведеного прикладу:

3.625e+8

Дивіться також

  • printf() - Виводить відформатований рядок
  • fprintf() - Записує відформатований рядок у потік
  • vprintf() - Виводить відформатований рядок
  • vsprintf() - Повертає відформатований рядок
  • vfprintf() - Записує відформатований рядок у потік
  • sscanf() - Розбирає рядок відповідно до заданого формату
  • fscanf() - Обробляє дані з файлу відповідно до формату
  • number_format() - Форматує число з поділом груп
  • date() - Форматує тимчасову мітку Unix