ДОБРО ПОЖАЛОВАТЬ НА САЙТ PHPLIST Всё о PHP |
Написать письмо авторам |
Функции форматного вывода. Спецификаторы преобразования
printf() и sprintf()Синтаксис: int printf(string format [, mixed args]) string sprintf(string format [, mixed args]) Об этих функциях мы поговорим несколько подробнее, чем о предыдущих функциях работы со строками, нами рассмотренных. Сразу скажем, что эти две функции предназначены для форматного вывода и что отличаются они тем, что функция printf() производит форматирование и выводит результаты в выходной поток (браузер или консоль), а sprintf() после осуществления требуемого форматирования просто возвращает строку. С одной стороны этими функциями можно пользоваться просто как функциями вывода: <? printf("Hello!"); // выводит "Hello!" sprintf("Hello!"); // сама по себе ничего не выводит, $str = sprintf("Hello!"); // а просто возвращает строку, printf($str); // которую затем можно вывести в выходной поток ?> Но использовать их только так, как мы сейчас продемонстрировали – простое расточительство, так как эти функции способны на большее. Дело в том, что аргумент format этих функций представляет собой строку, содержащую специальные символы, использующиеся при форматировании данных, содержащихся в списке аргументов. Эти спецсимволы называются спецификаторами преобразования, а символы, которые остаются неизменными при форматировании строки, называют директивами. Спецификация определяется символом "%", за которым может следовать до пяти спецификаторов в следующем порядке:
Теперь, после разговора о спецификаторах типа, выведем с помощью функции printf() строку в формате даты dd/mm/yyyy. Следующий код выводит в результате строку "02/03/2003": <? $day = 2; $month = 3; $year = 2003; printf("%02d/%02d/%04d", $day, $month, $year); ?> Результат:
В этом примере, месяц и день мы форматируем как двузначные числа, а год – как четырехзначное. При этом мы указываем, что целые числа дополняются до минимальной длины нулями слева: %04d Первый символ – спецификатор заполнения и он равен нулю. Так как дополнение дописывается к началу числа, спецификатор выравнивания отсутствует. Спецификатор минимальной ширины равен двум. Спецификатор точности также отсутствует, так как мы форматируем целое число. Спецификатор типа представлен символом d, так как мы форматируем число как десятичное целое. Приведем еще один пример. <? $value = 19; printf("%.3f", $value); ?> Этот скрипт выводит число 19 в виде 19.000 Еще одна форматная функция функция sscanf()Синтаксис: mixed sscanf(string str, string format [, string var1 ...]) Эта функция является полной противоположностью функции printf(). Она интерпретирует строку str согласно формату format, аналогично спецификации printf(). При указании только двух аргументов полученные значения возвращаются как массив. Давайте рассмотрим такой пример. Пусть у нас есть строка, в которой находится информация о названии и серийном номере изделия в виде "maxtor/203-5505" и нам надо вытащить из нее серийный номер. Пишем вот такой скриптик: <? $product = "maxtor/203-5505"; $str = sscanf($product,"maxtor/%3d-%4d"); echo ("$str[0]-$str[1]"); ?> Результат:
Не забывайте, что если не указываете в функции необязательные аргументы, то на выходе получите массив, и поэтому при выводе мы работаем со значениями массива. Давайте поработаем еще с датой изготовления этого изделия, которая нам явилась в виде "august 10 2003", а нам надо чтоб она выводилась в виде " 10 aug 2011". Работаем. <? $date = "august 10 2011"; list($month, $day, $year) = sscanf($date, "%s %d %d"); echo("Date: $day-".substr($month,0,3)."-$year"); ?> Результат:
Важное замечание: при указании необязательных параметров их надо передавать по ссылке (ссылка обозначается указанием символа "&" перед переменной). Пример, в котором используются дополнительные необязательные параметры: <? $book = "1\tThinking in PHP"; $str = sscanf($book,"%d\t%s %s %s", &$id, &$first, &$second, &$last); echo ("book number $id - $first $second $last"); ?> Результат:
|
Наверх |