Представим, что задача состоит в следующем: необходимо осуществить склонение чисел в правильном виде. Например: есть два числа — 2 и 10, первое обозначает год, второе месяц, необходимо вывести «2 года, 10 месяцев».
Для решения данной задачи потребуется написать функцию. Мы будем определять цифру стоящую после десятков и на основании этого указывать нужное наклонение. При этом необходимо передавать в функцию 3 варианта наклонения, когда после десятков стоит единица, когда цифра больше единицы, но меньше пяти и когда больше или равно пяти. Эти данные мы будем передавать в виде массива с тремя значениями, что обеспечит правильное склонение чисел:
1 | array( 'год', 'года', 'лет', ) |
Помимо этого будет еще два параметра, отвечающих за вывод дополнительного контента до и после полученной строки, это делается для того, если число равно нулю, чтобы ничего не выводить и если равно не нулю, то ставить, например запятую.
Функция: склонение чисел на PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 стоит запятая, поэтому, если значение будет не ноль, но получится, что после указания года стоит запятая и далее идет информация о месяцах, а если значение месяцев равно нулю, то после информации о годах ничего не идет.
1 | $time = declension( $year, array( 'год', 'года', 'лет', )) . declension( $month, array( 'месяц', 'месяца', 'месяцев', ), ', ' ); |
Где $year и $month — это значение лет и месяцев соответственно.
Данная функция позволяет осуществить склонение чисел для любых слов.