Рубрики
Backend

Функция – склонение чисел на PHP

Представим, что задача состоит в следующем: необходимо осуществить склонение чисел в правильном виде. Например: есть два числа – 2 и 10, первое обозначает год, второе месяц, необходимо вывести “2 года, 10 месяцев”.

Для решения данной задачи потребуется написать функцию. Мы будем определять цифру стоящую после десятков и на основании этого указывать нужное наклонение. При этом необходимо передавать в функцию 3 варианта наклонения, когда после десятков стоит единица, когда цифра больше единицы, но меньше пяти и когда больше или равно пяти. Эти данные мы будем передавать в виде массива с тремя значениями, что обеспечит правильное склонение чисел:

array( 'год', 'года', 'лет', )

Помимо этого будет еще два параметра, отвечающих за вывод дополнительного контента до и после полученной строки, это делается для того, если число равно нулю, чтобы ничего не выводить и если равно не нулю, то ставить, например запятую.

Функция: склонение чисел на PHP

function declension( $num, $vars, $before = '', $after = '' )
{
	if( $num == 0 ) // если число равно нулю
		return; // ничего не возвращаем
	$normal_num = $num; // сохраняем число в исходном виде
	$num = $num % 10; // определяем цифру, стоящую после десятка
	if( $num == 1 ) // если это единица
	{
		$num = $normal_num . ' ' . $vars[0];
	}else if( $num > 1 && $num < 5 ) // если это 2, 3, 4
	{
		$num = $normal_num . ' ' . $vars[1];
	}else
	{
		$num = $normal_num . ' ' . $vars[2];
	}
	return $before . $num . $after; // возвращаем строку
}

Далее идет пример использования данной функции: у второго числа, в качестве значения параметра $before стоит запятая, поэтому, если значение будет не ноль, но получится, что после указания года стоит запятая и далее идет информация о месяцах, а если значение месяцев равно нулю, то после информации о годах ничего не идет.

$time = declension( $year, array( 'год', 'года', 'лет', )) . declension( $month, array( 'месяц', 'месяца', 'месяцев', ), ', ' );

Где $year и $month – это значение лет и месяцев соответственно.

Данная функция позволяет осуществить склонение чисел для любых слов.