ProfiPHPProfiPHP
  1. Главная
  2. Функции обработки строк
  3. Функция Printf

Функция Printf

Функция Printf выводит отформатированную строку.
printf( string $format [, mixed $... ] ) : int
Функция Printf выводит строку, отформатированную в соответствии с аргументом Format.

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

Спецификаторы преобразования имеют следующий формат:
%[flags][width][.precision]specifier.
Флаги:

- Выравнивание по левому краю в пределах заданной ширины поля; По умолчанию выравнивание происходит по правому краю.

+ Печатает плюс + у не отрицательных чисел; По умолчанию знак печатается только у отрицательных чисел.

(space) Дополняет результат пробелами. Это поведение по умолчанию.

0 Дополняет числа нулями (только слева). Со спецификатором s также может дополнять нулями справа.

(char) Дополняет результат символом (char).

В спецификаторе Ширина указывается целое число, определяющее минимальное количество символов, которое будет напечатано.

Точность. Точка . с последующим целым числом, работающая по разному для разных спецификаторов:

- Для спецификаторов e, E, f и F: задает количество цифр после десятичной запятой (по умолчанию 6).

- Для спецификаторов g и G: задает максимальное значение печатаемых значащих цифр.

- Для спецификатора s: задает ограничение максимального количества символов в строке, которые будут выведены.
Если указана точка без последующего значения точности, то точность будет считаться за 0.

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

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

% - Символ процента. Аргументы не требуются.

b - Определитель целого числа, которое выводится в виде двоичного представлении.

c - Аргумент рассматривается как целое число и печатается как символ из таблицы ASCII с соответствующим кодом.

d - Спецификатор десятичного целого числа со знаком, используется для под­становки целых чисел, например, О, 100, -45.

e - Аргумент считается за число в научной нотации (т.е. 1.2e+2). Начиная с PHP 5.2.1, спецификатор точности задает количество цифр после десятичной запятой. В более ранних версиях он задавал общее количество значащих цифр (т.е. после запятой выводилось на 1 символ меньше).

E - Аналогично спецификатору e, но использует заглавные символы (т.е. 1.2E+2).

f - Аргумент считается за число с плавающей точкой (с учетом локали).

F - Аргумент считается за число с плавающей точкой (без учета локали). Доступно с PHP 5.0.3.

g - Общий формат.

Пусть P равно точности, если она не равно нулю, 6 - если точность не задана и 1, если точность задана как 0. Тогда, если преобразование со стилем "E" будет иметь показатель степени X:

Если P > X ≥ −4, преобразование будет в стиле "f" и точность будет P − (X + 1). В обратном случае, преобразование будет в стиле "e" и точность будет P − 1.

G - Аналогично спецификатору g, но использует E и F.

o - Аргумент рассматривается как целое число и печатается в восмеричном представлении.

s - Аргумент рассматривается и печатается как строка.

u - Аргумент рассматривается как целое число и печатается как беззаковое целое число.

x - Спецификатор для подстановки в строку формата шестнадцатеричного числа без знака (строчные буквы для а, b, с, d , е, f).

X - Спецификатор для подстановки в строку формата шестнадцатеричного числа без знака (прописные буквы для А, B, С, D, Е, F) .
Спецификатор c игнорирует значения ширины и дополнения.

Переменные будут приведены к подходящему для спецификатора типу:
string (s)

integer (d, u, c, o, x, X, b)
double (g, G, e, E, f, F)

Функция Printf возвращает длину выводимой строки.

Пример использования функция Printf:
<?php
$n = 59874632;
$u = -59874632;
$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 = '11100100011001110101001000'
%c = 'A'
%d = '59874632'
%e = '5.987463e+7'
%u = '59874632'
%u = '18446744073649676984'
%f = '59874632.000000'
%o = '344316510'
%s = '59874632'
%x = '3919d48'
%X = '3919D48'
%+d = '+59874632'
%+d = '-59874632'
Использование определителя типа X для шестнадцатеричных чисел удобно при формировании цвета в НТМL-тегах.
<?php
$red = 255;
$green = 255;
$blue = 100;
printf('#%X%X%X', $red, $green, $blue); // #FFFF64
Между символом % и определителем типа может быть расположен определитель заполнения. Определитель заполнения состоит из символа заполнения и числа, которое определяет, сколько символов отводится под вывод. Все не занятые параметром символы будут заполнены символом заполнителя. Так, в следующем примере под вывод числа 45 отводится пять символов, поскольку само число занимает лишь два символа, три ведущих символа будут содержать символ заполнения:
<?php
echo '<pre>';
printf('% 4d\n', 45); // ' 45'
printf('%04d\n', 45); // '00045'
echo '</pre>';
Применение определителя типа f позволяет вывести число в десятичном формате. Очень часто требуется вывести строго определенное число символов после запятой, например, для вывода денежных единиц, где обязательным требованием являются два знака после запятой. В этом случае прибегают к определителю точности, который следует сразу за определителем ширины и представляет собой точку и число символов, отводимых под дробную часть числа:
<?php
echo '<pre>';
printf('%8.2f\n', 1000.456); // 1000.46
printf('%.2f\n', 12.928); // 12.93
В первом случае под все число отводятся 8 символов, два из которых будут заняты мантиссой числа. Во втором случае ограничение накладывается только на количество цифр после точки.

Добавить комментарий

Имя:
Текст комментария: