mirror of
https://github.com/igorsimdyanov/php8.git
synced 2025-07-29 12:52:43 +00:00
Глава 28: корректура
This commit is contained in:
@ -1,44 +1,45 @@
|
||||
<?php
|
||||
// Функция формирует двумерный массив, представляющий собой
|
||||
// календарь на указанный месяц и год. Массив состоит из строк,
|
||||
// соответствующих неделям. Каждая строка - массив из семи
|
||||
// элементов, которые равны числам (или пустой строке, если
|
||||
// данная клетка календаря пуста).
|
||||
function makeCal(int $year, int $month) : array {
|
||||
// Получаем номер дня недели для 1 числа месяца.
|
||||
$wday = date('N');
|
||||
// Начинаем с этого числа в месяце (если меньше нуля
|
||||
// или больше длины месяца, тогда в календаре будет пропуск).
|
||||
$n = - ($wday - 2);
|
||||
$cal = [];
|
||||
// Цикл по строкам.
|
||||
for ($y = 0; $y < 6; $y++) {
|
||||
// Будущая строка. Вначале пуста.
|
||||
$row = [];
|
||||
$notEmpty = false;
|
||||
// Цикл внутри строки по дням недели.
|
||||
for ($x = 0; $x < 7; $x++, $n++) {
|
||||
// Текущее число > 0 и < длины месяца?
|
||||
if (checkdate($month, $n, $year)) {
|
||||
// Да. Заполняем клетку.
|
||||
$row[] = $n;
|
||||
$notEmpty = true;
|
||||
} else {
|
||||
// Нет. Клетка пуста.
|
||||
$row[] = "";
|
||||
}
|
||||
}
|
||||
// Если в данной строке нет ни одного непустого элемента,
|
||||
// значит, месяц кончился.
|
||||
if (!$notEmpty) break;
|
||||
// Добавляем строку в массив.
|
||||
$cal[] = $row;
|
||||
}
|
||||
return $cal;
|
||||
// Функция формирует двумерный массив, представляющий собой
|
||||
// календарь на указанный месяц и год. Массив состоит из строк,
|
||||
// соответствующих неделям. Каждая строка - массив из семи
|
||||
// элементов, которые равны числам (или пустой строке, если
|
||||
// данная клетка календаря пуста).
|
||||
function makeCal(int $year, int $month) : array
|
||||
{
|
||||
// Получаем номер дня недели для 1 числа месяца.
|
||||
$wday = date('N');
|
||||
// Начинаем с этого числа в месяце (если меньше нуля
|
||||
// или больше длины месяца, тогда в календаре будет пропуск).
|
||||
$n = - ($wday - 2);
|
||||
$cal = [];
|
||||
// Цикл по строкам.
|
||||
for ($y = 0; $y < 6; $y++) {
|
||||
// Будущая строка. Вначале пуста.
|
||||
$row = [];
|
||||
$notEmpty = false;
|
||||
// Цикл внутри строки по дням недели.
|
||||
for ($x = 0; $x < 7; $x++, $n++) {
|
||||
// Текущее число > 0 и < длины месяца?
|
||||
if (checkdate($month, $n, $year)) {
|
||||
// Да. Заполняем клетку.
|
||||
$row[] = $n;
|
||||
$notEmpty = true;
|
||||
} else {
|
||||
// Нет. Клетка пуста.
|
||||
$row[] = "";
|
||||
}
|
||||
}
|
||||
// Если в данной строке нет ни одного непустого элемента,
|
||||
// значит, месяц кончился.
|
||||
if (!$notEmpty) break;
|
||||
// Добавляем строку в массив.
|
||||
$cal[] = $row;
|
||||
}
|
||||
return $cal;
|
||||
}
|
||||
|
||||
$now = getdate();
|
||||
$cal = makeCal($now['year'], $now['mon']);
|
||||
$now = getdate();
|
||||
$cal = makeCal($now['year'], $now['mon']);
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
|
@ -1,7 +1,8 @@
|
||||
<?php
|
||||
// Вычисляет timestamp в Гринвиче, который соответствует
|
||||
// локальному timestamp-формату
|
||||
function local2utc($localStamp = false) {
|
||||
function local2utc($localStamp = false)
|
||||
{
|
||||
if ($localStamp === false) $localStamp = time();
|
||||
|
||||
// Получаем смещение часовой зоны в секундах
|
||||
@ -16,7 +17,8 @@ function local2utc($localStamp = false) {
|
||||
// смещение локальной зоны относительно UTC (в часах),
|
||||
// тогда будет осуществлен перевод в эту зону
|
||||
// (а не в текущую локальную).
|
||||
function utc2local($gmStamp = false, $tzOffset = false) {
|
||||
function utc2local($gmStamp = false, $tzOffset = false)
|
||||
{
|
||||
if ($gmStamp === false) return time();
|
||||
|
||||
// Получаем смещение часовой зоны в секундах
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?php
|
||||
$text = 'Привет от somebody@mail.ru, а также от other@mail.ru!';
|
||||
$html = preg_replace(
|
||||
'/(\S+)@([a-z0-9.]+)/is', // найти все E-mail
|
||||
'<a href="mailto:$0">$0</a>', // заменить их по шаблону
|
||||
$text // искать в $text
|
||||
'/(\S+)@([a-z0-9.]+)/is', // найти все E-mail
|
||||
'<a href="mailto:$0">$0</a>', // заменить их по шаблону
|
||||
$text // искать в $text
|
||||
);
|
||||
echo $html;
|
||||
|
@ -1,9 +1,16 @@
|
||||
<?php
|
||||
$str = '<hTmL><bOdY style="background: white;">Hello, world!</bOdY></html>';
|
||||
$str = <<<HTML
|
||||
<hTmL>
|
||||
<bOdY style="background: white;">
|
||||
Hello, world!
|
||||
</bOdY>
|
||||
</html>
|
||||
HTML;
|
||||
|
||||
$str = preg_replace_callback(
|
||||
'{(?<btag></?)(?<content>\w+)(?<etag>.*?>)}s',
|
||||
fn($m) => $m['btag'].strtoupper($m['content']).$m['etag'],
|
||||
$str);
|
||||
$str
|
||||
);
|
||||
|
||||
echo htmlspecialchars($str);
|
||||
|
@ -10,6 +10,7 @@ $str = preg_replace_callback_array(
|
||||
return "<strong>$m[1]</strong>";
|
||||
}
|
||||
],
|
||||
$str);
|
||||
$str
|
||||
);
|
||||
|
||||
echo htmlspecialchars($str);
|
||||
|
Reference in New Issue
Block a user