Правильное склонение окончаний слов во множественном числе

Недавно столкнулся с задачей, что нужно вывести возраст участника на карточке, причем указать только число было недостаточным. А написать после числа слово «лет» работало только в половине случаев.

Функция для правильного склонения возраста

Получился вот такой вот код:

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 созвездия

Добавить комментарий

Ваш адрес email не будет опубликован.