(PHP 4, PHP 5, PHP 7)
sprintf — Возвращает отформатированную строку
Описание
$format [, mixed $args [, mixed $... ]] )Возвращает строку, созданную с использованием строки формата format.
Список параметров
format-
Строка формата состоит из нуля и более директив: обычных символов (за исключением %), которые копируются напрямую в результирующую строку, и описателей преобразований, каждый из которых заменяется на один из параметров. Это относится как к sprintf(), так и к printf().
Каждый описатель преобразований состоит из знака процента (%), за которым следует один или более дополнительных элементов (в том порядке, в котором они здесь перечислены):
- Необязательный описатель знака, указывающий как знак (- или +) будет применен к числу. По умолчанию используется только знак минус, если число отрицательное. Этот описатель заставляет положительные числа также отображать знак плюс.
- Необязательный описатель заполнения, который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или 0. По умолчанию используется пробел. Альтернативный символ может быть указан с помощью одиночной кавычки (‘). См. примеры ниже.
- Необязательный описатель выравнивания, определяющий выравнивание влево или вправо. По умолчанию выравнивается вправо, — используется для выравнивания влево.
- Необязательное число, описатель ширины, определяющий минимальное число символов, которое будет содержать результат этого преобразования.
- Необязательный описатель точности, указанный в виде точки (.), после которой следует необязательная строка из десятичных чисел, определяющая, сколько десятичных разрядов отображать для чисел с плавающей точкой. При использовании со строками этот описатель выступает в роли обрезающей точки, устанавливающей максимальный лимит символов. Также между точкой и цифрой можно указать символ, используемый при дополнении числа.
-
Описатель типа, определяющий, как трактовать тип данных аргумента. Допустимые типы:
- % — символ процента. Аргумент не используется.
- b — аргумент трактуется как целое и выводится в виде двоичного числа.
- c — аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII.
- d — аргумент трактуется как целое и выводится в виде десятичного числа со знаком.
- e — аргумент трактуется как число в научной нотации (например, 1.2e+2). Описатель точности указывает на количество знаков после запятой, начиная с версии PHP 5.2.1. В более ранних версиях он обозначал количество значащих цифр (на один знак меньше).
- E — аналогично %e, но использует заглавную букву (например, 1.2E+2).
- f — аргумент трактуется как число с плавающей точкой и также выводится в зависимости от локали.
- F — аргумент трактуется как число с плавающей точкой и также выводится, но без зависимости от локали. Доступно, начиная с версии PHP 5.0.3.
- g — выбирает самую краткую запись из %e и %f.
- G — выбирает самую краткую запись из %E и %f.
- o — аргумент трактуется как целое и выводится в виде восьмеричного числа.
- s — аргумент трактуется как строка.
- u — аргумент трактуется как целое и выводится в виде десятичного числа без знака.
- x — аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в нижнем регистре).
- X — аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в верхнем регистре).
Переменные будут преобразованы в соответвующий тип для спецификатора:
Обработка типов Тип Спецификатор string s integer d, u, c, o, x, X, b double g, G, e, E, f, F ВниманиеПопытка использовать комбинацию строк и спецификаторов ширины с кодировками, которые требуют более одного байта на символ, может привести к неожиданным результатам.
В строке формата поддерживается нумерация и изменение порядка параметров. Например:
Пример #1 Изменение порядка параметров
<?php $num = 5; $location = 'дереве'; $format = '%d обезьян сидят на %s'; echo sprintf($format, $num, $location); ?>
Этот код выведет «5 обезьян сидят на дереве». Теперь представьте, что строка формата содержится в отдельном файле, который потом будет переведен на другой язык, и мы переписываем ее в таком виде:
Пример #2 Изменение порядка параметров
<?php $format = 'На %s сидят %d обезьян'; echo sprintf($format, $num, $location); ?>
Появляется проблема: порядок описателей преобразования не соответствует порядку аргументов. Мы не хотим менять код, и нам нужно указать, какому аргументу соответствует тот или иной описатель преобразования.
Пример #3 Изменение порядка параметров
<?php $format = 'На %2$s сидят %1$d обезьян'; echo sprintf($format, $num, $location); ?>
Нумерация аргументов имеет еще одно применение: она позволяет вывести один и тот же аргумент несколько раз без передачи функции дополнительных параметров.
Пример #4 Изменение порядка параметров
<?php $format = 'На %2$s сидят %1$d обезьян. Как здорово, когда на %2$s сидят %1$d обезьян.'; echo sprintf($format, $num, $location); ?>
При изменении порядка параметров описатель позиции n$ должен идти сразу за знаком процента (%) прежде всех остальных описателей, как показано в примере ниже.
Пример #5 Указание дополняющего символа
<?php echo sprintf("%'.9d\n", 123); echo sprintf("%'.09d\n", 123); ?> Результат выполнения данного примера: ......123 000000123Пример #6 Использование описателя позиции и совместно с другими описателями
<?php $format = 'На %2$s сидят %1$04d обезьян'; echo sprintf($format, $num, $location); ?>
Результат выполнения данного примера:
На дереве сидят 0005 обезьян
Замечание:
Попытка использовать спецификатор позиции, больший чем
PHP_INT_MAX, приведет к генерации предупреждения функцией sprintf().ВниманиеОписатель типа c игнорирует дополнение строки и ее ширину
args...
Возвращаемые значения
Возвращает строку, отформатированную в соответствии со строкой format, или FALSE в случае возникновения ошибки.
Примеры
Пример #7 sprintf(): заполнение нулями
<?php
$n = 43951789;
$u = -43951789;
$c = 65; // ASCII 65 is 'A'
// заметьте, двойной %% выводится как одинарный '%'
printf("%%b = '%b'\n", $n); // двоичное представление
printf("%%c = '%c'\n", $c); // выводит символ ascii, аналогично функции chr()
printf("%%d = '%d'\n", $n); // обычное целое число
printf("%%e = '%e'\n", $n); // научная нотация
printf("%%u = '%u'\n", $n); // беззнаковое целое представление положительного числа
printf("%%u = '%u'\n", $u); // беззнаковое целое представление отрицательного числа
printf("%%f = '%f'\n", $n); // представление числа с плавающей точкой
printf("%%o = '%o'\n", $n); // восьмеричное представление
printf("%%s = '%s'\n", $n); // строка
printf("%%x = '%x'\n", $n); // шестнадцатеричное представление (нижний регистр)
printf("%%X = '%X'\n", $n); // шестнадцатеричное представление (верхний регистр)
printf("%%+d = '%+d'\n", $n); // описатель знака с положительным целым числом
printf("%%+d = '%+d'\n", $u); // описатель знака с отрицательным целым числом
?>
Результат выполнения данного примера:
%b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%u = '43951789'
%u = '4251015507'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'
Пример #8 printf(): описатели строк
<?php
$s = 'monkey';
$t = 'many monkeys';
printf("[%s]\n", $s); // обычный вывод строки
printf("[%10s]\n", $s); // выравнивание вправо с пробелами
printf("[%-10s]\n", $s); // выравнивание влево с пробелами
printf("[%010s]\n", $s); // дополнение нулями также работает со строками
printf("[%'#10s]\n", $s); // использование собственного дополняющего символа '#'
printf("[%10.10s]\n", $t); // выравнивание влево с обрезкой в 10 символов
?>
Результат выполнения данного примера:
[monkey]
[ monkey]
[monkey ]
[0000monkey]
[####monkey]
[many monke]
Пример #9 sprintf(): целые числа, дополненные нулями
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
Пример #10 sprintf(): форматирование денежных величин
<?php
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money выведет "123.1";
$formatted = sprintf("%01.2f", $money);
// echo $formatted выведет "123.10"
?>
Пример #11 sprintf(): научная нотация
<?php
$number = 362525200;
echo sprintf("%.3e", $number); // выведет 3.625e+8
?>

