Привет, дорогой друг. Сейчас мы реализуем автоматическое склонение слов при помощи PHP и напишем универсальную функцию, которую можно будет переносить из проекта в проект и при этом все будет работать более, чем корректно. Склонение слов в зависимости от числа требуется очень часто, если сайт чуть больше среднего, где есть различные категории и множество других страниц, относящихся к этим категориям. К примеру есть специалисты и у них есть стаж работы. У каждого он разный. И в зависимости ото того, сколько лет, нужно выводить (1) год, (22) года или (7) лет. Каждый раз вручную прописывать не очень практично, гораздо лучше сделать так, чтобы менялось все автоматически, чем мы с вами и займемся.
Функцию склонения слов в PHP можно назвать как угодно, но лучше, и по правилам именования функций, чтобы ее название говорило вам, что она делает, поэтому мы назовем ее declination , что в переводе на русский означает — склонение. По традиции я пишу функцию, потом объясняю что и как в ней работает.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| function declination( $num, $words ) {
if ( $num > 19 ) {
$num = $num % 10;
}
switch ( $num ) {
case 1:
{
return ( $words[0] );
}
case 2:
case 3:
case 4:
{
return ( $words[1] );
}
default:
{
return ( $words[2] );
}
}
} |
function declination( $num, $words ) {
if ( $num > 19 ) {
$num = $num % 10;
}
switch ( $num ) {
case 1:
{
return ( $words[0] );
}
case 2:
case 3:
case 4:
{
return ( $words[1] );
}
default:
{
return ( $words[2] );
}
}
}
И вызов этой функции:
echo declination(50, ['год', 'года', 'лет']); |
echo declination(50, ['год', 'года', 'лет']);
В параметрах функции указываем первым аргументом число, а вторым массив слов. С 3 по 5 строку проверяем является ли число больше 19, то получаем остаток ото деления на 10. К примеру если 21 / 10, то остаток получаем 1. и в switch — case проверяем, если остаток 1, то возвращаем $words[0] — (год), если 2, 3, или 4 — $words[1] (года), если другое, то $words[2] (лет).
Так как функция является универсальной, мы можем склонять и другие слова, если они идут в паре с числами. Это может быть стоимость в какой-то валюте, например в рублях:
echo declination(50, ['рубль', 'рубля', 'рублей']); |
echo declination(50, ['рубль', 'рубля', 'рублей']);
Как вы поняли склонение слов в PHP не такая уж и сложная задача. Как правило просто копируем функцию и используем ее по назначению, а не придумываем свой велосипед, хоть это и бывает иногда полезным.
Добавить комментарий