
Недавно столкнулся с задачей, что нужно вывести возраст участника на карточке, причем указать только число было недостаточным. А написать после числа слово «лет» работало только в половине случаев.
Функция для правильного склонения возраста
Получился вот такой вот код:
function get_age_ending($age) {
$ending = '';
if ($age == 1) {
$ending = 'год';
}
elseif( ($age > 1) and ($age <= 4) ) {
$ending = 'года';
}
elseif( ($age >= 5) and ($age <= 20) ) {
$ending = 'лет';
}
elseif( $age >= 21 ) {
$age_string = strval($age);
$last = $age_string{ strlen($age_string) - 1 } ;
if ($last == '1') {
$ending = 'год';
}
elseif (($last == '2') or ($last == '3') or ($last == '4')) {
$ending = 'года';
}
else {
$ending = 'лет';
}
}
return $ending;
}
Так как эти правила работают не только для год-года-лет, но и для любых слов во множественном числе, то написал расширенный вариант функции, с возможностью задать любые слова.
Функция вывода правильных окончаний во множественном числе:
function word_plural_ending_rus($age, $form1="год", $form2="года", $form5="лет" ) {
$ending = '';
if ($age == 1) {
$ending = $form1;
}
elseif( ($age > 1) and ($age <= 4) ) {
$ending = $form2;
}
elseif( ($age >= 5) and ($age <= 20) ) {
$ending = $form5;
}
elseif( $age >= 21 ) {
$age_string = strval($age);
$last = $age_string{ strlen($age_string) - 1 } ;
if ($last == '1') {
$ending = $form1;
}
elseif (($last == '2') or ($last == '3') or ($last == '4')) {
$ending = $form2;
}
else {
$ending = $form5;
}
}
return $age . ' ' . $ending;
}
Использование функции:
<?php
echo word_plural_ending_rus(12,'подарок', 'подарка', 'подарков');
echo word_plural_ending_rus(34,'созвездие', 'созвездия', 'созвездий');
?>
Выедет:
12 подарков
34 созвездия