Глава 28: корректура

This commit is contained in:
Igor Simdyanov
2022-07-30 12:06:22 +03:00
parent 8d821403b2
commit 7723e90741
5 changed files with 57 additions and 46 deletions

View File

@ -1,44 +1,45 @@
<?php <?php
// Функция формирует двумерный массив, представляющий собой // Функция формирует двумерный массив, представляющий собой
// календарь на указанный месяц и год. Массив состоит из строк, // календарь на указанный месяц и год. Массив состоит из строк,
// соответствующих неделям. Каждая строка - массив из семи // соответствующих неделям. Каждая строка - массив из семи
// элементов, которые равны числам (или пустой строке, если // элементов, которые равны числам (или пустой строке, если
// данная клетка календаря пуста). // данная клетка календаря пуста).
function makeCal(int $year, int $month) : array { function makeCal(int $year, int $month) : array
// Получаем номер дня недели для 1 числа месяца. {
$wday = date('N'); // Получаем номер дня недели для 1 числа месяца.
// Начинаем с этого числа в месяце (если меньше нуля $wday = date('N');
// или больше длины месяца, тогда в календаре будет пропуск). // Начинаем с этого числа в месяце (если меньше нуля
$n = - ($wday - 2); // или больше длины месяца, тогда в календаре будет пропуск).
$cal = []; $n = - ($wday - 2);
// Цикл по строкам. $cal = [];
for ($y = 0; $y < 6; $y++) { // Цикл по строкам.
// Будущая строка. Вначале пуста. for ($y = 0; $y < 6; $y++) {
$row = []; // Будущая строка. Вначале пуста.
$notEmpty = false; $row = [];
// Цикл внутри строки по дням недели. $notEmpty = false;
for ($x = 0; $x < 7; $x++, $n++) { // Цикл внутри строки по дням недели.
// Текущее число > 0 и < длины месяца? for ($x = 0; $x < 7; $x++, $n++) {
if (checkdate($month, $n, $year)) { // Текущее число > 0 и < длины месяца?
// Да. Заполняем клетку. if (checkdate($month, $n, $year)) {
$row[] = $n; // Да. Заполняем клетку.
$notEmpty = true; $row[] = $n;
} else { $notEmpty = true;
// Нет. Клетка пуста. } else {
$row[] = ""; // Нет. Клетка пуста.
} $row[] = "";
} }
// Если в данной строке нет ни одного непустого элемента, }
// значит, месяц кончился. // Если в данной строке нет ни одного непустого элемента,
if (!$notEmpty) break; // значит, месяц кончился.
// Добавляем строку в массив. if (!$notEmpty) break;
$cal[] = $row; // Добавляем строку в массив.
} $cal[] = $row;
return $cal;
} }
return $cal;
}
$now = getdate(); $now = getdate();
$cal = makeCal($now['year'], $now['mon']); $cal = makeCal($now['year'], $now['mon']);
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="ru"> <html lang="ru">

View File

@ -1,7 +1,8 @@
<?php <?php
// Вычисляет timestamp в Гринвиче, который соответствует // Вычисляет timestamp в Гринвиче, который соответствует
// локальному timestamp-формату // локальному timestamp-формату
function local2utc($localStamp = false) { function local2utc($localStamp = false)
{
if ($localStamp === false) $localStamp = time(); if ($localStamp === false) $localStamp = time();
// Получаем смещение часовой зоны в секундах // Получаем смещение часовой зоны в секундах
@ -16,7 +17,8 @@ function local2utc($localStamp = false) {
// смещение локальной зоны относительно UTC (в часах), // смещение локальной зоны относительно UTC (в часах),
// тогда будет осуществлен перевод в эту зону // тогда будет осуществлен перевод в эту зону
// (а не в текущую локальную). // (а не в текущую локальную).
function utc2local($gmStamp = false, $tzOffset = false) { function utc2local($gmStamp = false, $tzOffset = false)
{
if ($gmStamp === false) return time(); if ($gmStamp === false) return time();
// Получаем смещение часовой зоны в секундах // Получаем смещение часовой зоны в секундах

View File

@ -1,8 +1,8 @@
<?php <?php
$text = 'Привет от somebody@mail.ru, а также от other@mail.ru!'; $text = 'Привет от somebody@mail.ru, а также от other@mail.ru!';
$html = preg_replace( $html = preg_replace(
'/(\S+)@([a-z0-9.]+)/is', // найти все E-mail '/(\S+)@([a-z0-9.]+)/is', // найти все E-mail
'<a href="mailto:$0">$0</a>', // заменить их по шаблону '<a href="mailto:$0">$0</a>', // заменить их по шаблону
$text // искать в $text $text // искать в $text
); );
echo $html; echo $html;

View File

@ -1,9 +1,16 @@
<?php <?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( $str = preg_replace_callback(
'{(?<btag></?)(?<content>\w+)(?<etag>.*?>)}s', '{(?<btag></?)(?<content>\w+)(?<etag>.*?>)}s',
fn($m) => $m['btag'].strtoupper($m['content']).$m['etag'], fn($m) => $m['btag'].strtoupper($m['content']).$m['etag'],
$str); $str
);
echo htmlspecialchars($str); echo htmlspecialchars($str);

View File

@ -10,6 +10,7 @@ $str = preg_replace_callback_array(
return "<strong>$m[1]</strong>"; return "<strong>$m[1]</strong>";
} }
], ],
$str); $str
);
echo htmlspecialchars($str); echo htmlspecialchars($str);