
Недавно столкнулся с задачей, что нужно вывести возраст участника на карточке, причем указать только число было недостаточным. А написать после числа слово «лет» работало только в половине случаев.
Функция для правильного склонения возраста
Получился вот такой вот код:
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 созвездия