На многих сайтах, которые имеют большие каталоги статей по разделам в самом начале каждого отдельного текста статьи размещена информация о примерном времени прочтения этого материала. Что делает такие сайты более информативными и удобными для пользователя. И, как раз для этого, мы с вами выясним, как посчитать время чтения статьи на PHP и реализуем функцию, которая будет считать, сколько времени потребуется читателям для ознакомления с вашим контентом. Давайте приступать.
Функция подсчета слов в тексте
Прежде всего следует написать отдельную функцию, которая будет очищать содержимое от HTML тегов и считать общее количество слов в статье. Мы будем ее использовать внутри другой функции.
1
2
3
4
5
| function str_word_count_utf8($str)
{
$a = preg_split('/\W+/u', strip_tags($str), -1, PREG_SPLIT_NO_EMPTY);
return count($a);
} |
function str_word_count_utf8($str)
{
$a = preg_split('/\W+/u', strip_tags($str), -1, PREG_SPLIT_NO_EMPTY);
return count($a);
}
Функция подсчета времени прочтения текста
Мы уже можем посчитать общее количество слов в статье. Среднее время чтения — примерно 200 слов в минуту. Отсюда и будем отталкиваться. Для того, чтобы получить минуты, мы количество слов делим на 200. Секунды будем получать по более сложной формуле.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| function read_time_estimate($content)
{
$word_count = str_word_count_utf8($content);
// 200 - средняя скорость чтения слов в минуту
$words_per_minute = 200;
// время чтения статьи в минутах
$minutes = floor($word_count / $words_per_minute);
// время чтения статьи в секундах
$seconds = floor($word_count % $words_per_minute / ($words_per_minute / 60));
$str_minutes = ($minutes == 1) ? "мин." : "мин.";
$str_seconds = ($seconds == 1) ? "сек." : "сек.";
if ($minutes == 0) {
return "{$seconds} {$str_seconds}";
} else {
return "{$minutes} {$str_minutes}, {$seconds} {$str_seconds}";
}
} |
function read_time_estimate($content)
{
$word_count = str_word_count_utf8($content);
// 200 - средняя скорость чтения слов в минуту
$words_per_minute = 200;
// время чтения статьи в минутах
$minutes = floor($word_count / $words_per_minute);
// время чтения статьи в секундах
$seconds = floor($word_count % $words_per_minute / ($words_per_minute / 60));
$str_minutes = ($minutes == 1) ? "мин." : "мин.";
$str_seconds = ($seconds == 1) ? "сек." : "сек.";
if ($minutes == 0) {
return "{$seconds} {$str_seconds}";
} else {
return "{$minutes} {$str_minutes}, {$seconds} {$str_seconds}";
}
}
Остается вывести на экран время прочтения текста статьи.
1
2
3
4
5
| $post_content = 'Текст вашей статьи...';
echo '<svg width="16px" height="16px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3
//.org/2000/svg">
<path d="M5.06152 12C5.55362 8.05369 8.92001 5 12.9996 5C17.4179 5 20.9996 8.58172 20.9996 13C20.9996 17.4183 17.4179 21 12.9996 21H8M13 13V9M11 3H15M3 15H8M5 18H10" stroke="#333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
</svg> ' . read_time_estimate($post_content); |
$post_content = 'Текст вашей статьи...';
echo '<svg width="16px" height="16px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3
//.org/2000/svg">
<path d="M5.06152 12C5.55362 8.05369 8.92001 5 12.9996 5C17.4179 5 20.9996 8.58172 20.9996 13C20.9996 17.4183 17.4179 21 12.9996 21H8M13 13V9M11 3H15M3 15H8M5 18H10" stroke="#333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
</svg> ' . read_time_estimate($post_content);
Для красоты я поставил SVG иконку часов, которая символизирует время, которое будет затрачено на прочтение статьи. И выглядит это вот так:
Если статья небольшая и время чтения ее займет меньше минуты, то выводиться будут только секунды. Если больше минуты, тол и минуты и секунды. Если секунды вам не нужны или место на сайте не позволяет вывести все вместе, то на 19 строке можно убрать , {$seconds} {$str_seconds}
Надеюсь, что материал вам понравился. Код полностью рабочий и вы смело можете его использовать в своих проектах или личных сайтах.
Добавить комментарий