aliencash
@aliencash
Партизан

Как одной строчкой кода решить задачу (год|года|лет)?

Нужно написать функцию, имеющую на входе целое число лет, а на выходе строку соответствующую правилам русского языка, например "21 год", "24 года", "18 лет". Ключевой момент - работа функции на максимально возможном диапазоне лет.
Само собой варианты типа
switch ($cnt) {
		case 1:
		case 21:
		case 31:
		case 41:
			return $cnt.' год';
			break;
		case 2:
		case 3:
		case 4:
		case 22:
		case 23:
		case 24:
		case 32:
		case 33:
		case 34:
			return $cnt.' года';
			break;
		default:
			return $cnt.' лет';
	}
и
if( in_array($cnt, array(1, 21, 31, 41, 51, 61, 71, 81, 91)) ) return $cnt.' год';
	elseif( in_array($cnt, array(2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94)) ) return $cnt.' годa';
	else return $cnt.' лет';

не подходят. )

Какие идеи? )))
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
@galaxy
return "$n " . ( ($n / 10) % 10 == 1 || $n % 10 > 4 || $n % 10 == 0 ? 'лет' : ($n % 10 == 1 ? 'год' : 'года') );

детский сад...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ну так возьми свой же первый вариант, но вместо сравнения целого числа - сравни только два младших разряда числа)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы