Oc-windows.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php printf примеры

printf()

Синтаксис:

printf ( (format, arg1[, arg2[, arg++]])

Поддерживается следующими версиями PHP:

Описание функции:

Функции printf() выводит отформатированную строку. Возвращает длину строки.

Обязательный аргумент. Аргумент содержит строку и указания на формат переменных.

Возможные значения форматирования:

%% — Знак %
%b — трактуется как целое и выводится в виде двоичного числа
%c — трактуется как целое и выводится в виде символа с соответствующим кодом ASCII
%d — трактуется как целое и выводится в виде десятичного числа со знаком.
%e — трактуется как float и выводится в научной нотации (например 2.4e+3).
%E — аналогично %e, только выводит большую букву E (например 2.4E+3).
%u — трактуется как целое и выводится в виде десятичного числа без знака.
%f — трактуется как float и выводится в виде десятичного числа с плавающей точкой. (локальные настройки).
%F — трактуется как float и выводится в виде десятичного числа с плавающей точкой. (не локальные настройки).
%g — выводится то, что короче %e или %f .
%G — выводится то, что короче %E или %f .
%o — трактуется как целое и выводится в виде восьмеричного числа.
%s — трактуется как строка.
%x — трактуется как целое и выводится в виде шестнадцатеричного числа (в нижнем регистре букв).
%X — трактуется как целое и выводится в виде шестнадцатеричного числа (в верхнем регистре букв).

Дополнительные значения форматирования:

  • + (ставит знак «+» или «-» перед числами, по умолчанию ставится только перед отрицательными числами)
  • * ( символ используемый для заполнения результата до нужной длины.)
  • — (выравниватель влево, по умолчанию вправо)
  • [0-9] (минимальное число символов)
  • .[0-9] (описатель точности для чисел с плавающей точкой)

Дополнительные значения форматирования используются в выше перечисленном порядке.

arg1Обязательный аргумент. Аргумент который должен быть вставлен в первую %знак конструкцию в аргументе format.mixedarg2, arg++Необязательный аргумент. Аргумент который должен быть вставлен во вторую, третью и т.д %знак конструкцию в аргументе format.mixed

Примеры:

Пример 1:

$model = ‘жигули’;
$year = 1975;
$format = ‘Это %s %d года’;
printf($format, $model, $year);
?>

Это жигули 1975 года

Пример 2:

$ar = 7545;
$format = ‘%g’;
printf($format, $ar);
echo «
«;
$ar = 754576868;
printf($format, $ar);
?>

Пример 3:

В этом примере задействованы все значения дополнительного форматирования, а также показано различие между выравниванием вправо и влево.

$ar = 7545.4545;
$format = ‘%+0+9.2f’;
printf($format, $ar);
echo ‘
‘;
$format = ‘%+0-9.2f’;
printf($format, $ar);
?>

Пример 4:

Для изменение порядка следования параметров используется n$

$model = ‘жигули’;
$year = 1975;
$format = «Это %2$d года %1$s «;
printf($format, $model, $year);
?>

sprintf — Возвращает отформатированную строку

(PHP 4, PHP 5, PHP 7)

sprintf — Возвращает отформатированную строку

Описание

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

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

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

Каждый описатель преобразований состоит из знака процента (%), за которым следует один или более дополнительных элементов (в том порядке, в котором они здесь перечислены):

  1. Необязательный описатель знака, указывающий как знак (- или +) будет применен к числу. По умолчанию, используется только знак минус, если число отрицательное. Этот описатель заставляет положительные числа также отображать знак плюс, он был добавлен в PHP 4.3.0.
  2. Необязательный описатель заполнения, который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или . По умолчанию используется пробел. Альтернативный символ может быть указан с помощью одиночной кавычки (). См. примеры ниже.
  3. Необязательный описатель выравнивания, определяющий выравнивание влево или вправо. По умолчанию выравнивается вправо, используется для выравнивания влево.
  4. Необязательное число, описатель ширины, определяющий минимальное число символов, которое будет содержать результат этого преобразования.
  5. Необязательный описатель точности, указанный в виде точки (‘.’), после которой следует необязательная строка из десятичных чисел, определяющая, сколько десятичных разрядов отображать для чисел с плавающей точкой. При использовании со строками этот описатель выступает в роли обрезающей точки, устанавливающей максимальный лимит символов. Также между точкой и цифрой можно указать символ, используемый при дополнении числа.

Описатель типа, определяющий, как трактовать тип данных аргумента. Допустимые типы:

  • % — символ процента. Аргумент не используется.
  • b — аргумент трактуется как целое и выводится в виде двоичного числа.
  • c — аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII.
  • d — аргумент трактуется как целое и выводится в виде десятичного числа со знаком.
  • e — аргумент трактуется как число в в научной нотации (например, 1.2e+2). Описатель точности указывает на количество знаков после запятой, начиная с версии PHP 5.2.1. В более ранних версиях он обозначал количество значащих цифр (на один знак меньше).
  • E — аналогично %e, но использует заглавную букву (например, 1.2E+2).
  • f — аргумент трактуется как число с плавающей точкой и также выводится в зависимости от локали.
  • F — аргумент трактуется как число с плавающей точкой и также выводится, но без зависимости от локали. Доступно, начиная с версии PHP 4.3.10 и PHP 5.0.3.
  • g — выбирает самую краткую запись из %e и %f.
  • G — выбирает самую краткую запись из %E и %f.
  • o — аргумент трактуется как целое и выводится в виде восьмеричного числа.
  • s — аргумент трактуется как строка.
  • u — аргумент трактуется как целое и выводится в виде десятичного числа без знака.
  • x — аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в нижнем регистре).
  • X — аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в верхнем регистре).

Переменные будут преобразованы в соответвующий тип для спецификатора:

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

ТипСпецификатор
strings
integerd, u, c, o, x, X, b
doubleg, G, e, E, f, F

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

В строке формата поддерживается нумерация и изменение порядка параметров. Например:

Пример #1 Изменение порядка параметров

= 5 ;
$location = ‘дереве’ ;

$format = ‘%d обезьян сидят на %s’ ;
echo sprintf ( $format , $num , $location );
?>

Пример #2 Изменение порядка параметров

Пример #3 Изменение порядка параметров

Пример #4 Изменение порядка параметров

Пример #5 Указание дополняющего символа

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

Пример #6 Использование описателя позиции и совместно с другими описателями

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

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

The c type specifier ignores padding and width

Возвращаемые значения

Возвращает строку, отформатированную в соответствии со строкой format .

Примеры

Пример #7 sprintf() : заполнение нулями

= 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 ); // описатель знака с отрицательным целым числом
?>

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

Пример #8 printf() : описатели строк

= ‘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 символов
?>

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

Пример #9 sprintf() : целые числа, дополненные нулями

Пример #10 sprintf() : форматирование денежных величин

Пример #11 sprintf() : научная нотация

echo sprintf ( «%.3e» , $number ); // выведет 3.625e+8
?>

Смотрите также

  • printf() — Выводит отформатированную строку
  • sscanf() — Разбирает строку в соответствии с заданным форматом
  • fscanf() — Обрабатывает данные из файла в соответствии с форматом
  • vsprintf() — Возвращает отформатированную строку
  • number_format() — Форматирует число с разделением групп

Учебник по PHP 4

Сколько новых сайтов Вы делаете за год? результаты

  1. Основы PHP
  2. Операторы языка PHP
  3. Строковые функции

Строковые функции PHP

ПредыдущаяСледующая

Функции форматного вывода. Спецификаторы преобразования

printf() и sprintf()

Об этих функциях мы поговорим несколько подробнее, чем о предыдущих функциях работы со строками, нами рассмотренных. Сразу скажем, что эти две функции предназначены для форматного вывода и что отличаются они тем, что функция printf() производит форматирование и выводит результаты в выходной поток (браузер или консоль), а sprintf() после осуществления требуемого форматирования просто возвращает строку.

С одной стороны этими функциями можно пользоваться просто как функциями вывода:

Но использовать их только так, как мы сейчас продемонстрировали – простое расточительство, так как эти функции способны на большее. Дело в том, что аргумент format этих функций представляет собой строку, содержащую специальные символы, использующиеся при форматировании данных, содержащихся в списке аргументов. Эти спецсимволы называются спецификаторами преобразования, а символы, которые остаются неизменными при форматировании строки, называют директивами.

Спецификация определяется символом «%«, за которым может следовать до пяти спецификаторов в следующем порядке:

Устанавливает символ, которым строка заполняется до заданного размера. По умолчанию используется пробел. Спецификатор заполнения действует только при наличии спецификатора минимальной ширины

По умолчанию дополнение строки до минимальной ширины производится с левого края (т.е., строка выравнивается по правому краю). Если добавлен символ дефиса, то строка выравнивается по левому краю

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

Предназначен для указания количества десятичных знаков в представлении чисел с плавающей точкой. При применении этого спецификатора для форматирования строк, он определяет максимальное количество символов, которое нужно взять из переданной строки

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

  • b – целое число, представляемое в двоичном виде;
  • с – целое число, представляемое в виде символа с тем же ASCII кодом;
  • d – целое число, представляемое в десятичном виде;
  • f – число с плавающей точкой, представляемое в виде десятичной дроби;
  • o – целое число, представляемое в восьмеричном виде;
  • s – строка;
  • x – целое число, представляемое в шестнадцатеричном виде в нижнем регистре;
  • X – целое число, представляемое в шестнадцатеричном виде в верхнем регистре

Теперь, после разговора о спецификаторах типа, выведем с помощью функции printf() строку в формате даты dd/mm/yyyy. Следующий код выводит в результате строку «02/03/2003«:

02/03/2003

В этом примере, месяц и день мы форматируем как двузначные числа, а год – как четырехзначное. При этом мы указываем, что целые числа дополняются до минимальной длины нулями слева: %04d

Первый символ – спецификатор заполнения и он равен нулю. Так как дополнение дописывается к началу числа, спецификатор выравнивания отсутствует. Спецификатор минимальной ширины равен двум. Спецификатор точности также отсутствует, так как мы форматируем целое число. Спецификатор типа представлен символом d, так как мы форматируем число как десятичное целое.

Приведем еще один пример.

Этот скрипт выводит число 19 в виде 19.000

Еще одна форматная функция

функция sscanf()

Эта функция является полной противоположностью функции printf(). Она интерпретирует строку str согласно формату format, аналогично спецификации printf(). При указании только двух аргументов полученные значения возвращаются как массив.

Давайте рассмотрим такой пример. Пусть у нас есть строка, в которой находится информация о названии и серийном номере изделия в виде «maxtor/203-5505» и нам надо вытащить из нее серийный номер. Пишем вот такой скриптик:

203-5505

Не забывайте, что если не указываете в функции необязательные аргументы, то на выходе получите массив, и поэтому при выводе мы работаем со значениями массива.

Давайте поработаем еще с датой изготовления этого изделия, которая нам явилась в виде «august 10 2003«, а нам надо чтоб она выводилась в виде » 10 aug 2003«. Работаем.

Date: 10-aug-2003

Важное замечание: при указании необязательных параметров их надо передавать по ссылке (ссылка обозначается указанием символа «&» перед переменной).

Пример, в котором используются дополнительные необязательные параметры:

book number 1 — Thinking in PHP>

ПредыдущаяСледующая

Если Вам нужна частная профессиональная консультация от авторов многих книг Кузнецова М.В. и Симдянова И.В., добро пожаловать в наш Консультационный Центр SoftTime.

Зачем использовать функцию sprintf в PHP?

Я пытаюсь узнать больше о функции PHP sprintf (), но php.net не помог мне, так как я все еще смущен, почему вы хотите его использовать?

Взгляните на мой пример ниже.

Зачем использовать это:

Когда это делает то же самое и легче писать IMO:

Я что-то упустил?

sprintf имеет все возможности форматирования исходного printf, что означает, что вы можете сделать гораздо больше, чем просто вставлять значения переменных в строки.

Например, укажите формат номера (шестнадцатеричный, десятичный, восьмеричный), количество десятичных знаков, отступы и многое другое. Google для printf, и вы найдете множество примеров. Статья в wikipedia на printf должна начать вас.

Существует много вариантов использования sprintf, но один из способов, которыми я их использую, – это сохранить такую ​​строку: «Hello, My Name is% s» в базе данных или как константа в классе PHP. Таким образом, когда я хочу использовать эту строку, я могу просто сделать это:

По сути, это позволяет некоторое разделение кода. Если я использую «Hello, My Name is% s» во многих местах моего кода, я могу изменить его на «% s – это мое имя» в одном месте и он обновляется повсеместно автоматически, без необходимости обращаться к каждому экземпляру и перемещаться конкатенации.

Другое использование sprintf в локализованных приложениях, поскольку аргументы sprintf не должны быть в том порядке, в котором они отображаются в строке формата.

Но такой язык, как французский, заказывает слова по-разному:

(Да, мой французский отстой: я изучил немецкий язык в школе!)

На самом деле, вы должны использовать gettext для хранения локализованных строк, но вы получите эту идею.

Это легче перевести.

Строки перевода (gettext) теперь:

При переводе на какой-то другой язык это может быть невозможно или это приводит к очень странным предложениям.

Теперь, если у вас есть

Строки перевода (gettext) теперь:

  • Вот результат:% s для этой даты% s

Это имеет гораздо больший смысл, и гораздо более гибко переводить на другие языки

Лучшая причина, по которой я нашел, заключается в том, что она позволяет размещать все языковые строки в вашем языковом файле, если люди могут переводить и заказывать их по мере необходимости, – но вы все равно знаете, что независимо от формата, в котором находится строка, вы хотите показать имя пользователя.

Например, ваш сайт скажет «С возвращением [[Пользователь]]» в верхней части страницы. Как программист вы не знаете или не заботитесь о том, как ребята из UI собираются написать это – вы просто знаете, что имя пользователя будет показано где-то в сообщении.

Таким образом, вы можете вставлять сообщение в свой код, не беспокоясь о том, что это сообщение на самом деле.

Файл Lang (EN_US):

Затем вы можете поддерживать любой тип сообщения на любом языке, используя это в своем фактическом php-коде.

Как уже упоминалось, он позволяет форматировать входные данные. Например, форсирование 2dp, 4-значных чисел и т. Д. Это очень полезно для построения строк запросов MySQL.

Другим преимуществом является то, что он позволяет отделить макет строки от данных, подаваемых в нее, почти как питание в параметрах. Например, в случае запроса MySQL:

Разумеется, этот метод имеет другие применения, например, при печати вывода в формате HTML и т. Д.

Изменить. Из соображений безопасности при использовании техники, описанной выше, перед использованием этого метода необходимо очистить все входные переменные с помощью mysql_real_escape_string() , чтобы предотвратить атаки вставки MySQL. Если вы разобрали несанкционированный ввод, ваш сайт и сервер будут взломаны . (За исключением, конечно, переменных, которые были полностью построены вашим кодом и гарантированно будут в безопасности).

зачем вы хотите его использовать?

Это очень полезно при использовании (внешнего) источника для языковых строк. Если вам нужно фиксированное количество переменных в данной многоязычной строке, вам нужно знать только правильный порядок:

EN.txt

hu.txt

Вставные переменные даже не должны быть в начале или в конце на нескольких языках, но только их порядок.

Конечно, вы могли бы написать свою собственную функцию для выполнения этой замены, несомненно, даже с небольшим увеличением производительности, но это намного быстрее, просто (если у вас есть класс Language для чтения языковых строк) :

Он также поставляется с полными возможностями printf , таким образом, также является одним слоем для форматирования множества типов переменных, например:

  • точность вывода чисел с плавающей запятой или
  • заполнение целых чисел с ведущими нулями .

Использование sprintf () намного чище и безопаснее форматировать вашу строку.

Например, когда вы имеете дело с входными переменными, это предотвращает неожиданные сюрпризы, заранее указывая ожидаемый формат (например, вы ожидаете строку [ %s ] или номер [ %d ]). Это потенциально может помочь с возможным риском SQL-инъекции , но это не помешает, если строка состоит из кавычек.

Это также помогает работать с float, вы можете явно указать точность цифр (например, %.2f ), которая избавит вас от использования функций преобразования.

Другими преимуществами являются то, что большинство основных языков программирования имеют собственную реализацию sprintf() , поэтому, познакомившись с ней, она становится еще проще в использовании, а не изучает новый язык (например, как конкатенировать строки или преобразовывать плавает).

Таким образом, это хорошая практика для использования, чтобы иметь более чистый и читаемый код.

Например, см. Приведенный ниже пример :

Или какой-то простой пример, который печатает, например, ‘1’,’2′,’3′,’4′ :

и печать с форматированной строкой:

где printf() эквивалентно sprintf() , но он выводит форматированную строку вместо ее возвращения (в переменную).

Что более читаемо?

Даже я, хотя то же самое, если только не использовал его в последнее время. Когда вы создаете документы на основе пользовательских входов, это будет удобно.

Который может быть легко написан как

Некоторые из типичных случаев – это то, где вам нужен более точный контроль над выходным форматом. Это может быть сложно, например, удостовериться, что определенное значение имеет определенное количество пробелов, проложенных спереди, в зависимости от его длины или число, выводимое в определенном точном формате.

В руководстве по PHP есть много примеров

Также, что приходит на ваш пример «проще писать». Хотя эхо может быть проще писать, sprintf легче читать, особенно если у вас много переменных.

Другой причиной использования sprintf или printf может быть то, что вы хотите, чтобы пользователь определял выходной формат некоторого значения – вы можете смело разрешить им определять формат вывода, совместимый с sprintf.

О, и ваш пример на самом деле ошибочен для одной части. sprintf возвращает строку, но echo does not – echo немедленно выводит ее и ничего не возвращает, а sprintf просто возвращает ее.

Если вы использовали C / C ++, то вы бы использовали функцию sprintf.

Существует хорошая вероятность того, что вторая линия менее эффективна. Echo сконструирован как команда вывода, тогда как sprintf предназначен для замещения токенов. Я не человек PHP, но я подозреваю, что с эхом есть больше объектов. Если он действует как Java, он создает новую строку каждый раз, когда что-то добавляется в список, поэтому вы должны создать 4 строки.

Обычно я использую sprintf для обеспечения того, что идентификатор, который поступает с пользовательского ввода, является целым числом, например:

Также используется для выполнения рудиментарных шаблонов (для html-писем или других вещей), поэтому вы можете повторно использовать шаблон во многих местах:

Очень полезно также форматировать числа в разных представлениях (восьмеричные, управлять десятичной точкой и т. Д.).

Также можно написать:

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

sprintf особенно полезен при форматировании строк, которые используют числа. Например,

Апельсины отформатированы как целое число (-2), но будут округлены до положительных чисел, если вы используете% u для значений без знака. Чтобы избежать такого поведения, я использую абсолютную функцию abs () для округления числа до нуля следующим образом:

Конечным результатом является утверждение с высокой читабельностью, логической конструкцией, четким форматированием и гибкостью для добавления дополнительных переменных по мере необходимости. По мере увеличения числа переменных в сочетании с функциями, которые манипулируют этими переменными, преимущества становятся более очевидными. В качестве последнего примера:

Левая часть оператора sprintf четко выражает строку и типы ожидаемых значений, а правая сторона четко выражает используемые переменные и как их манипулируют.

Иногда у меня есть что-то вроде этого, что я считаю более легким для чтения:

Аргумент тот же, что и для использования шаблонов. Вы захотите отделить свой Textsleev от фактических значений переменных. Помимо дополнительных полномочий sprintf, о которых мы упоминали, это просто стиль.

Действительно хороший пример использования sprintf выводит заполненные форматы чисел, а также при смешивании разных типов в строке. Его во многих случаях легче читать и делает его очень простым для печати различных представлений одной и той же переменной, особенно числовых.

Ну, sprintf имеет много возможностей, поскольку мы знаем пример, как показано ниже:

Несколько месяцев назад мне нужно было преобразовать секунды в час: минута: секунды Формат Как $t = 494050 //seconds я хотел напечатать, как 137 h 14 m 10 s поэтому я придумал функцию php springf() я просто удерживаю секунды в $t и echo sprintf(«%02d h %s%02d m %s%02d s», floor($t/3600), $f, ($t/60)%60, $f, $t%60); дает мне 137 h 14 m 10 s

Функция sprintf () очень полезна, если мы знаем, как ее использовать.

Использование функции sprintf () над обычной конкатенацией имеет то преимущество, что вы можете применять различные типы форматирования для конкатенированных переменных.

В вашем случае у вас есть

Возьмем $result = ‘passed’; date = ’23rd’; $result = ‘passed’; date = ’23rd’;

Используя обычную конкатенацию, вы можете получить только результат:

Однако, если вы используете sprintf() вы можете получить модифицированный результат, например:

Читать еще:  Php mysql linux
Ссылка на основную публикацию
Adblock
detector