mirror of
https://github.com/igorsimdyanov/php8.git
synced 2025-08-01 16:49:53 +00:00
Глава 28: корректура
This commit is contained in:
@ -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">
|
||||||
|
@ -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();
|
||||||
|
|
||||||
// Получаем смещение часовой зоны в секундах
|
// Получаем смещение часовой зоны в секундах
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
Reference in New Issue
Block a user