Учебное пособие 889
.pdfТаблица 4 Спецификаторы преобразования, используемые
в функции printf()
Спецификатор |
Преобразование, осуществляе- |
Пример (для |
|
мое с аргументом |
аргумента |
|
|
123) |
% |
Отображение символа % (ар- |
% |
|
гументы не требуются) |
|
b |
Отображение аргумента в виде |
1111011 |
|
двоичного целого числа |
|
c |
Отображение ASCII-символа с |
{ |
|
кодом, содержащимся в аргу- |
|
|
менте |
|
d |
Отображение аргумента в виде |
123 |
|
целого десятичного числа со |
|
|
знаком |
|
e |
Отображение аргумента с ис- |
1.23000e+2 |
|
пользованием экспоненциаль- |
|
|
ной формы записи |
|
f |
Отображение аргумента в виде |
123.000000 |
|
числа с плавающей точкой |
|
|
|
|
o |
Отображение аргумента в виде |
173 |
|
восьмеричного целого числа |
|
s |
Отображение аргумента в виде |
123 |
|
строки |
|
|
|
|
u |
Отображение аргумента в виде |
123 |
|
беззнакового десятичного чис- |
|
|
ла |
|
|
|
|
x |
Отображение аргумента в виде |
7b |
|
шестнадцатеричного числа с |
|
|
символами в нижнем регистре |
|
X |
Отображение аргумента в виде |
7B |
|
шестнадцатеричного числа в |
|
|
верхнем регистре |
|
|
29 |
|
В функции printf можно использовать любое количество спецификаторов, если им передается соответствующее количество аргументов и если каждый спецификатор предваряется символом %.
Например, можно использовать функцию printf для установки цвета в коде HTML с помощью значений интенсивности красного, зеленого и синего цвета (RGB). Чтобы не переводить эти числа в шестнадцатеричный формат добавим их в функцию printf:
printf(“<font color=’#%X%X%X’>Привет</font>”, 65, 127,
245);
В данном случае, цвет устанавливается с помощью атрибута color тега font. В качестве значения указывается шестнадцатеричная константа, начинающаяся с символа #, за которым следуют три форматирующие спецификации %X, по одной для каждого из чисел. В результате эта команда выдаст следующий текст:
<font color=’#417FF5’>Привет</font>
Обычно представляется удобным в качестве аргументов printf использовать переменные или выражения. Например, если значения для цветового решения хранятся в трех переменных – $r, $g, $b, то более темный оттенок можно получить с помощью выражения
printf(“<font color=’#%X%X%X’>Привет</font>”, $r-20, $g-20, $b-20);
Настройка представления данных
Можно указать не только тип преобразования, но и точность отображаемого результата. Например, суммы в валюте отображаются, как правило, с точностью до двух цифр. Но в
30
общем случае, может получиться более точный результат (например, при использовании операции деления).
Чтобы отобразить число с точностью до двух цифр, можно между символом % и спецификатором преобразования вставить строку «.2»:
printf(“Результат: $%.2f”, 123.42 / 12);
Результат: $10.29 Можно также указать, где и чем – нулями или пробелами
дополнить выводимый текст. В примере ниже указаны пять возможных комбинаций.
<?php
echo “<pre>”;
//Дополнение пробелами до 15 знакомест printf(“Результат равен %15f\n”, 123.42 / 12); //Дополнение нулями до 15 знакомест printf(“Результат равен %015f\n”, 123.42 / 12); //Дополнение пробелами до 15 знакомест // и вывод с точностью до двух десятичных знаков
printf(“Результат равен %15.2f\n”, 123.42 / 12); //Дополнение нулями до 15 знакомест //и вывод с точностью до двух десятичных знаков
printf(“Результат равен %015.2f\n”, 123.42 / 12);
//Дополнение символами # до 15 знакомест //и вывод с точностью до двух десятичных знаков
printf(“Результат равен %’#15.2f\n”, 123.42 / 12);
?>
Это пример выводит следующий текст:
Результат равен |
10.285000 |
Результат равен 00000010.285000
Результат равен |
10.29 |
|
31 |
Результат равен 000000000010.29 Результат равен ##########10.29
Следует обратить внимание на следующие моменты:
–самым правым символом спецификатора преобразования в данном случае является f, означающий преобразование в число с плавающей точкой;
–если сразу же перед спецификатором преобразования стоит сочетание точки и числа, значит, этим числом указана точность выводимой информации;
–независимо от присутствия спецификатора точности, если в общем спецификаторе присутствует число, то оно пред-
ставляет собой количество знакомест, выделяемых под выводимую информацию (в предыдущем примере это число 15);
–если выводимая информация уже равна количеству выделяемых знакомест или превышает его, этот аргумент игнорируется;
–перед самым левым символом % разрешается поставить символ 0, который игнорируется, если не указано количество выделяемых знакомест. Если это количество указано, то вместо
пробелов дополнение производится нулями;
– если нужно, чтобы пустующие знакоместа заполнялись не нулями или пробелами, а каким-нибудь другим символом, то можно выбрать любой символ, поставив перед ним одинарную кавычку: ‘#.
– в левой части спецификатора ставится символ %, с позиции которого и начинается преобразование.
Дополнение строк
Дополнить до требуемой длины можно не только числа, но и строки, выбирая для этого различные дополняющие символы и даже левую или правую границы выравнивания. Возможные варианты показаны в примере ниже:
32
<?php
echo “pre”;
$h = “Voronezh”; printf(“[%s]\n”, $h); printf(“[%15s]\n”, $h);
printf(“[%-15s]\n”, $h);
printf(“[%015s]\n”, $h); printf(“[%’#15s]\n”, $h); printf(“[%15.5s]\n”, $h);
printf(“[%-15.7s]\n”, $h);
?>
//Стандартный вывод строки //Выравнивание пробелами //по правому краю //Выравнивание пробелами //по левому краю //Дополнение нулями //Дополнение символами # //Выравнивание по правому //краю с усечением до //5 символов
//Выравнивание по левому //краю с усечением до //7 символов
Результат, выведенный на экран:
[Voronezh]
[ Voronezh] [Voronezh ] [0000000Voronezh] [#######Voronezh] [ Voron]
[Voronez ]
Если при указании количества знакомест длина строки уже равна этому количеству или превышает его, это указание будет проигнорировано, если только заданное количество символов, до которого нужно усечь строку, не будет меньше указанного количества знакомест.
33
Работа с датой и временем
Для отслеживания даты и времени в PHP используются стандартные отметки времени Unix, представляющие собой простое количество секунд, прошедших с начала отсчета – 1 января 1970 года. Для определения текущей отметки времени можно воспользоваться функцией time:
echo time();
Поскольку значение хранится в секундах, для получения отметки времени ровно через неделю можно воспользоваться следующим выражением, в котором к возвращаемому значению прибавляется 7 дней * 24 часа * 60 минут * 60 секунд:
echo time() + 7 * 24 * 60 * 60;
Если нужно получить отметку времени для заданной даты, можно воспользоваться функцией mktime. Она выводит отметку времени 946684800 для первой секунды первой минуты первого часа первого дня 2000 года:
echo mktime(0, 0, 0, 1, 1, 2000);
Этой функции передаются следующие параметры (слева направо):
–количество часов (0 – 23);
–количество минут (0 – 59);
–количество секунд (0 – 59);
–номер месяца (1 – 12);
–номер дня (1 – 31);
–год (1970 – 2038, или 1901 – 2038 при использовании
PHP 5.1.0 и выше).
Для отображения даты используется функция date, под-
держивающая множество настроек форматирования, позволя-
34
ющих выводить дату любым желаемым способом. Эта функция использует следующий синтаксис:
date ($format, $timestamp);
Параметр $format должен быть строкой, в которой содержатся спецификаторы форматирования, подробно описанные в табл. 5, а параметр $timestamp должен быть отметкой времени в стандарте Unix.
Следующая команда выводит текущее время и дату в формате «Thursday April 15th, 2010 – 1:38pm»:
echo date(“l F jS, Y – g:ia”, time());
Таблица 5 Основные спецификаторы формата в функции date
Формат |
Описание |
Возвращаемое |
|
|
значение |
|
Спецификаторы дня |
|
d |
День месяца, две цифры с |
от 01 до 31 |
|
лидирующими нулями |
|
|
|
|
D |
День недели, составлен- |
от Mon до Sun |
|
ный из трех букв |
|
j |
День месяца без лидиру- |
от 1 до 31 |
|
ющих нулей |
|
|
|
|
l |
День недели полностью |
от Sunday до Satur- |
|
|
day |
N |
День недели, число, от |
от 1 до 7 |
|
понедельника до воскре- |
|
|
сенья |
|
S |
Суффикс для дня месяца |
st, nd, rd или th |
w |
День недели, число, от |
от 0 до 6 |
|
воскресенья до субботы |
|
Z |
День года |
от 0 до 365 |
|
|
|
|
Спецификатор недели |
|
|
|
|
W |
Номер недели в году |
от 1 до 52 |
|
35 |
|
|
|
Продолжение табл. 5 |
|
Спецификаторы месяца |
|
F |
Название месяца |
от January до Decem- |
|
|
ber |
|
|
|
m |
Номер месяца с лидиру- |
от 01 до 12 |
|
ющими нулями |
|
M |
Название месяца, состав- |
от Jan до Dec |
|
ленное из трех букв |
|
n |
Номер месяца без лиди- |
от 1 до 12 |
|
рующих нулей |
|
T |
Количество дней в задан- |
28, 29, 30 или 31 |
|
ном месяце |
|
|
Спецификаторы года |
|
L |
Високосный год |
1 – Да, 0 – Нет |
Y |
Год, четыре цифры |
от 0000 до 9999 |
y |
Год, две цифры |
от 00 до 99 |
|
Спецификаторы времени |
|
a |
До или после полудня, в |
am или pm |
|
нижнем регистре |
|
A |
До или после полудня, в |
AM или PM |
|
верхнем регистре |
|
|
|
|
g |
Час суток, 12-часовой |
от 1 до 12 |
|
формат без лидирующих |
|
|
нулей |
|
|
|
|
G |
Час суток, 24-часовой |
от 1 до 24 |
|
формат без лидирующих |
|
|
нулей |
|
h |
Час суток, 12-часовой |
от 01 до 12 |
|
формат с лидирующими |
|
|
нулями |
|
H |
Час суток, 24-часовой |
от 01 до 24 |
|
формат с лидирующими |
|
|
нулями |
|
|
36 |
|
|
|
Окончание табл. 5 |
i |
Минуты с лидирующими |
от 00 до 59 |
|
нулями |
|
|
|
|
s |
Секунды с лидирующими |
от 00 до 59 |
|
нулями |
|
Функция checkdate()
С помощью данной функции можно проверить корректность даты состоящей из дня, месяца и года. Она возвращает два значения: TRUE, если передана допустимая дата; FALSE – если нет.
Например:
<?php $month = 9;
$day = 31; $year = 2012;
if (checkdate($month, $day, $year)) echo “Допустимая дата”;
else
echo “Не допустимая дата”;
?>
В данном случае на экран будет выведена фраза «Недопустимая дата», т.к. проверяется существование даты 31 сентября 2012 года (в сентябре же, как известно, 30 дней).
2.3. Задания на лабораторную работу № 11
Задание № 1. Создать ассоциативный массив в виде данных о пользователе (логин, пароль, ID, дата регистрации, группа, дата последнего входа в систему). Вывести на экран данные из массива в виде таблицы.
Задание № 2. Создать массив из 10 целых чисел. Вывести его содержимое в виде таблицы, в первом столбце которой
37
представлены элементы в десятичной системе счисления, во втором – в двоичной, в третьем – в шестнадцатиричной. Значения элементов массива должны быть выровнены относительно друг друга.
Задание № 3. Составить программу, которая выводит на экран дату в определенном формате. Варианты задания приведены в табл. 6.
|
|
Таблица 6 |
|
Варианты задания № 3 |
|
№ вари- |
Формат даты/времени (вместо указанной даты и |
|
анта |
времени должны быть текущие) |
|
1 |
Mon 05th, April, 2014, 22:05:07 |
|
2 |
Monday 5.4.2014, 22:05:07 |
|
3 |
5-04-14, Monday, 22 h 05 min 07 sec |
|
4 |
05.04.14, Mon, 10:05:07pm |
|
5 |
Mon, 05 April 2014, 10:05:07PM |
|
6 |
5th April 14, Monday, 22-05-07 |
|
7 |
05/04/2014, Mon, 22h 5m 7s |
|
8 |
22:05:07, 5 April 2014, Monday |
|
9 |
2014, April, 05th, 22-05-07, Monday |
|
10 |
22:05:07, Mon, April, |
5, 2014 |
11 |
2014, Monday, 5th April, |
22-05-07 |
12 |
5th April 2014, 22 h 05 min 07 sec, Mon |
|
|
|
|
13 |
April 5th, 2014, Mon, 22:05:07 |
|
|
|
|
14 |
05-04-2014, Monday, 22-05-07pm |
|
|
|
|
15 |
Monday, 22:05:07, 2014, 5th April |
|
|
|
|
16 |
2014, 22:05:07, Mon, 5th April |
|
|
|
|
17 |
Monday, 22-05-07pm, 05/04/2014 |
|
|
|
|
18 |
05-04-2014, 22:05:07pm, Monday |
38