функция printf в php
printf
printf — Выводит отформатированную строку
Описание
Список параметров
Строка формата состоит из нуля или более директив: обычные символы (за исключением % ), которые просто выводятся без изменения и спецификаторы преобразования, каждый из которых требует передачи своего параметра.
Argnum
Флаг | Описание |
---|---|
— | Выравнивание по левому краю в пределах заданной ширины поля; По умолчанию выравнивание происходит по правому краю. |
+ | Печатает плюс + у не отрицательных чисел; По умолчанию знак печатается только у отрицательных чисел. |
(space) | Дополняет результат пробелами. Это поведение по умолчанию. |
0 | Дополняет числа нулями (только слева). Со спецификатором s также может дополнять нулями справа. |
‘ (char) | Дополняет результат символом (char). |
Ширина
Целое число, определяющее минимальное количество символов, которое будет напечатано.
Точность
Замечание: Если указана точка без последующего значения точности, то точность будет считаться за 0.
Замечание: Попытка использовать спецификатор позиции со значением больше, чем PHP_INT_MAX приведет к выводу предупреждения.
Если P > X ≥ −4, преобразование будет в стиле «f» и точность будет P − (X + 1). В обратном случае, преобразование будет в стиле «e» и точность будет P − 1.
Спецификатор c игнорирует значения ширины и дополнения
Попытка использовать спецификаторы с указанием ширины для строки в многобайтовой кодировке может привести к неожиданным результатам.
Функции форматного вывода в PHP
Для форматного вывода в PHP используются две замечательных функции: printf() и sprintf(). У них достаточно много возможностей, которые мы обсудим в этой статье.
Сразу скажу, что разница между printf() и sprintf() лишь в том, что первая выводит строку сразу в выходной поток (например, в браузер), а вторая возвращает её.
Всего имеется несколько спецификаторов, которые объединяются в одну группу (один общий %), порядок которых следующий:
Давайте разберём классический пример по выводу отформатированной даты:
Нетрудно догадаться, что в результате будет выведена такая строка: «Дата написания статьи: 28.09.2012«. Обратите внимание, сколько групп спецификаторов, столько и параметров передаётся помимо самого формата. Строка «Дата написания статьи: » является директивой, и она остаётся без изменений. Теперь разберём для примера вторую группу спефикаторов, которая отвечает за месяц. Другие группы абсолютно идентичны.
Приведу ещё один популярный пример использования функции printf (и sprintf()), связанный с окргулением чисел:
Давайте разберём первый аргумент функции printf():
Как видите, функции printf() и sprintf() позволяют легко решать, на первый взгляд, достаточно сложные задачи. Поэтому Вам обязательно нужно иметь их в своём арсенале.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Учебник по PHP 4
Функции форматного вывода. Спецификаторы преобразованияprintf() и sprintf()Об этих функциях мы поговорим несколько подробнее, чем о предыдущих функциях работы со строками, нами рассмотренных. Сразу скажем, что эти две функции предназначены для форматного вывода и что отличаются они тем, что функция printf() производит форматирование и выводит результаты в выходной поток (браузер или консоль), а sprintf() после осуществления требуемого форматирования просто возвращает строку. С одной стороны этими функциями можно пользоваться просто как функциями вывода: Но использовать их только так, как мы сейчас продемонстрировали – простое расточительство, так как эти функции способны на большее. Дело в том, что аргумент format этих функций представляет собой строку, содержащую специальные символы, использующиеся при форматировании данных, содержащихся в списке аргументов. Эти спецсимволы называются спецификаторами преобразования, а символы, которые остаются неизменными при форматировании строки, называют директивами. Спецификация определяется символом «%«, за которым может следовать до пяти спецификаторов в следующем порядке:
Теперь, после разговора о спецификаторах типа, выведем с помощью функции printf() строку в формате даты dd/mm/yyyy. Следующий код выводит в результате строку «02/03/2003«:
Если Вам нужна частная профессиональная консультация от авторов многих книг Кузнецова М.В. и Симдянова И.В., добро пожаловать в наш Консультационный Центр SoftTime. fprintffprintf — Записывает отформатированную строку в поток ОписаниеСписок параметровСтрока формата состоит из нуля или более директив: обычные символы (за исключением % ), которые просто выводятся без изменения и спецификаторы преобразования, каждый из которых требует передачи своего параметра. Argnum
ШиринаЦелое число, определяющее минимальное количество символов, которое будет напечатано. Точность
Если P > X ≥ −4, преобразование будет в стиле «f» и точность будет P − (X + 1). В обратном случае, преобразование будет в стиле «e» и точность будет P − 1. Спецификатор c игнорирует значения ширины и дополнения Попытка использовать спецификаторы с указанием ширины для строки в многобайтовой кодировке может привести к неожиданным результатам. Возвращаемые значенияВозвращает длину записанной строки. ПримерыПример #1 fprintf() : заполнение нулями Пример #2 fprintf() : форматирование денежных величин Смотрите такжеsprintf(PHP 4, PHP 5, PHP 7, PHP 8) sprintf — Возвращает отформатированную строку ОписаниеСписок параметровСтрока формата состоит из нуля или более директив: обычные символы (за исключением % ), которые просто выводятся без изменения и спецификаторы преобразования, каждый из которых требует передачи своего параметра. Argnum
ШиринаЦелое число, определяющее минимальное количество символов, которое будет напечатано. Точность
Если P > X ≥ −4, преобразование будет в стиле «f» и точность будет P − (X + 1). В обратном случае, преобразование будет в стиле «e» и точность будет P − 1. Спецификатор c игнорирует значения ширины и дополнения Попытка использовать спецификаторы с указанием ширины для строки в многобайтовой кодировке может привести к неожиданным результатам. Возвращаемые значенияСписок изменений
ПримерыПример #1 Argument swapping Строка формата поддерживает нумерацию и перемешивание аргументов. Результат выполнения данного примера: Теперь представим, что строка форматирования задаётся в стороннем файле. Это обычная практика при необходимости поддержки нескольких языков. Представим, что строка была переписана таким образом: Дополнительным приятным моментом является то, что мы можем использовать один параметр для нескольких подстановок. При использовании нумерованных аргументов, спецификатор позиции n$ должен стоять сразу же за символом процента ( % ), до любого другого спецификатора, как показано ниже. Пример #2 Использование символа заполнения Результат выполнения данного примера: Пример #3 Спецификатор позиции в комбинации с другими спецификаторами Результат выполнения данного примера: Пример #4 sprintf() : целое с лидирующими нулями Пример #5 sprintf() : форматирование денежных единиц Результат выполнения данного примера: Пример #6 sprintf() : научная нотация Результат выполнения данного примера: Смотрите такжеUser Contributed Notes 36 notesWith printf() and sprintf() functions, escape character is not backslash ‘\’ but rather ‘%’. 1. A plus sign (‘+’) means put a ‘+’ before positive numbers while a minus sign (‘-‘) means left justify. The documentation incorrectly states that they are interchangeable. They produce unique results that can be combined: 2. Padding with a ‘0’ is different than padding with other characters. Zeros will only be added at the front of a number, after any sign. Other characters will be added before the sign, or after the number: There are already some comments on using sprintf to force leading leading zeros but the examples only include integers. I needed leading zeros on floating point numbers and was surprised that it didn’t work as expected. This threw me a little off. To get the desired result, one needs to add the precision (2) and the length of the decimal seperator «.» (1). So the correct pattern would be Please see http://stackoverflow.com/a/28739819/413531 for a more detailed explanation. Here is how to print a floating point number with 16 significant digits regardless of magnitude: $format = ‘There are %1$d monkeys in the %s and %s ‘; Expecting to output But, this will output Because, the second and Third specifiers takes 1rst and 2nd arguments. Because it is not assigned with any arguments. Using argument swapping in sprintf() with gettext: Let’s say you’ve written the following script: #: file.php:9 Notice how an extra backslash has been added by xgettext. Once you’ve translated the string, you must remove all backslashes from the ID string as well as the translation, so the po file will look like this: #: file.php:9 If you use the default padding specifier (a space) and then print it to HTML, you will notice that HTML does not display the multiple spaces correctly. This is because any sequence of white-space is treated as a single space. To overcome this, I wrote a simple function that replaces all the spaces in the string returned by sprintf() with the character entity reference » » to achieve non-breaking space in strings returned by sprintf() The old «monkey» example which helped me a lot has sadly disappeared. I’ll Re-post it in comment as a memory. /* $s = ‘monkey’ ; Note that when using the argument swapping, you MUST number every argument, otherwise sprintf gets confused. This only happens if you use number arguments first, then switch to a non-numbered, and then back to a numbered one. I had a nightmare trying to find the two’s complement of a 32 bit number. This worked magic for me. previously I was trying to use Hope this helps someone fighting with two’s complement in PHP. A more complete and working version of mb_sprintf and mb_vsprintf. It should work with any «ASCII preserving» encoding such as UTF-8 and all the ISO-8859 charsets. It handles sign, padding, alignment, width and precision. Argument swapping is not handled. $newformat = «» ; // build a new format in UTF-8 If you use argument numbering, then format specifications with the same number get the same argument; this can save repeating the argument in the function call. Just wanted to add that to get the remaining text from the string, you need to add the following as a variable in your scanf Here’s a clean, working version of functions to allow using named arguments instead of numeric ones. ex: instead of sprintf(‘%1$s’, ‘Joe’);, we can use sprintf(‘%name$s’, array(‘name’ => ‘Joe’));. I’ve provided 2 different versions: the first uses the php-like syntax (ex: %name$s), while the second uses the python syntax (ex: %(name)s).
|