PHP. Задание - выделить первую букву каждого предложения жирным шрифтом
Изначально заданий было несколько, но с ними я уже справился (реализовать постраничный вывод произвольного русского текста по k абзацев на страницу и определить количество символов, количество слов и количество предложений для каждого абзаца. Также выделил цветом все вхождения одного из слов)
Осталось последнее - выделить первую букву каждого предложения жирным шрифтом. Снизу привожу свой код, файла два.
Не судите строго, первые недели занятия прогой
index.php
$page = intval($_GET['page'] ?? 1);
if ($page < 1) {
$error = 'Запрошенная страница не существует';
include "template/error.php";
exit();
}
$text = 'Рассмотрим принцип работы двигателя внутреннего сгорания. Принцип работы ДВС основан на эффекте теплового расширения газов, возникающего при сгорании топливно-воздушной смеси и обеспечивающего перемещение поршня в цилиндре. Работа поршневого ДВС осуществляется циклически.
Каждый рабочий цикл происходит за два оборота коленчатого вала и включает четыре такта (четырехтактный двигатель): впуск, сжатие, рабочий ход и выпуск. Во время тактов впуск и рабочий ход происходит движение поршня вниз, а тактов сжатие и выпуск – вверх. Рабочие циклы в каждом из цилиндров двигателя не совпадают по фазе, чем достигается равномерность работы ДВС.
В некоторых конструкциях двигателей внутреннего сгорания рабочий цикл реализуется за два такта – сжатие и рабочий ход (двухтактный двигатель). На такте впуск впускная и топливная системы обеспечивают образование топливно-воздушной смеси. В зависимости от конструкции смесь образуется во впускном коллекторе (центральный и распределенный впрыск бензиновых двигателей) или непосредственно в камере сгорания (непосредственный впрыск бензиновых двигателей, впрыск дизельных двигателей).
При открытии впускных клапанов газораспределительного механизма воздух или топливно-воздушная смесь за счет разряжения, возникающего при движении поршня вниз, подается в камеру сгорания. На такте сжатия впускные клапаны закрываются, и топливно-воздушная смесь сжимается в цилиндрах двигателя. Такт рабочий ход сопровождается воспламенением топливно-воздушной смеси (принудительное или самовоспламенение).
В результате возгорания образуется большое количество газов, которые давят на поршень и заставляют его двигаться вниз. Движение поршня через кривошипно-шатунный механизм преобразуется во вращательное движение коленчатого вала, которое затем используется для движения автомобиля. При такте выпуск открываются выпускные клапаны газораспределительного механизма, и отработавшие газы удаляются из цилиндров в выпускную систему, где производится их очистка, охлаждение и снижение шума.
Далее газы поступают в атмосферу. Рассмотренный принцип работы двигателя внутреннего сгорания позволяет понять, почему ДВС имеет небольшой коэффициент полезного действия - порядка 40%. В конкретный момент времени как правило только в одном цилиндре совершается полезная работа, в остальных – обеспечивающие такты: впуск, сжатие, выпуск.';
$splitted = explode("\n", $text); // поделил на абзацы
$itemsPerPage = 2; // кол-во абзацев на странице
$itemsCount = count($splitted); // общее кол-во абзацев (в моем случае 6)
$pagesCount = ceil($itemsCount/$itemsPerPage); // определяем кол-во страниц
if($pagesCount == 0) { //если данные пусты
$pagesCount = 1; //то одна страница, хоть и пустая, все равно должна быть
}
if ($page > $pagesCount) {
exit('Запрошенная страница не существует');
}
$firstNumber = ($page - 1) * $itemsPerPage;
$pageData = array_slice($splitted, $firstNumber, $itemsPerPage);
include 'template/page.php';
echo "<br> <br>";
function paragraphData($string){
$symbolsCount = mb_strlen($string);
$words = explode(" ", $string);
$wordsCount = count($words);
$sentence1 = ".";
$sentence2 = "!";
$sentence3 = "?";
$sentenceCount = (mb_substr_count($string,$sentence1)) + (mb_substr_count($string, $sentence2)) + (mb_substr_count($string, $sentence3));
echo "<i> Количество символов - <b> $symbolsCount</b>; </i> ";
echo "<i> Количество слов - <b> $wordsCount</b>; </i>";
echo "<i> Количество предложений - <b> $sentenceCount</b>. </i> <br> <br>";
}
function keyWord($str) {
$keyword = 'ДВС';
$keywordRed = "<span style = 'color:red'> <b>$keyword</b> </span>";
$keywordReplacement = str_replace($keyword, $keywordRed, $str);
return $keywordReplacement;
}
page.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Постраничный вывод</title>
</head>
<body>
<h1>Страница <?=$page?></h1>
<div>
<?php
foreach ($pageData as $item){
echo "<div>" . keyWord($item) . "</div>" . "<br>";
paragraphData($item);
}
?>
</div>
<div>
<?php
for ($i = 1; $i <= $pagesCount; $i++){
if ($i == $page){
echo "$i";
} else {
?>
<a href ="index.php?page=<?=$i?>"><?=$i?></a>
<?php
}
}
?>
</div>
</body>
</html>
Ответы (1 шт):
Ответил в другом вашем вопросе. Продублирую здесь, если тот закроют.
Можно сделать с помощью регулярных выражений. Обернём каждую первую букву в предложении в тег <b></b>:
$text = 'Рассмотрим принцип работы двигателя внутреннего сгорания. Принцип работы ДВС основан на эффекте теплового расширения газов, возникающего при сгорании топливно-воздушной смеси и обеспечивающего перемещение поршня в цилиндре. Работа поршневого ДВС осуществляется циклически. Каждый рабочий цикл происходит за два оборота коленчатого вала и включает четыре такта (четырехтактный двигатель): впуск, сжатие, рабочий ход и выпуск.';
$result = preg_replace_callback('/(^|[.]\s*)([А-Я])/u', function($matches){
return $matches[1]."<b>".$matches[2]."</b>";
}, $text);
Само регулярное выражение:
^ - Начало строки
| - Или
[.] - Проверка что стоит точка. Сюда можно добавить ? или !.
\s* - ноль или больше пробелов
[А-Я] - буквы русского алфавита. Если надо добавить маленькие буквы, то изменить на [А-Яа-я]
u - Модификатор, указывающий на то что используется Юникод