Иногда необходимо изменить окончание в словах в зависимости от количества чего бы то ни было.
Самый яркий и простой пример, это корзина товаров в интернет магазине, ведь если добавляем один — это товар, а если два, то это уже будет товара.
В первой реализации используем остаток от деления %, переменные и ветвления.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $a = 0; //Первоначальное значение переменной $m = $a%10; //Остаток от деления на 10 вернет значение от 0 до 9 if ($a >= 5 && $a <= 20 ){//Первое условие проверяет значение от 5 до 20 и подставляет слово "товаров" echo $f = $a .'товаров' .'<br>'; } elseif ($m == 1){ //В переменной $m записан остаток от деления значения, хранящегося в $a //Если оно = 1 echo $f = $a .'товар' . '<br>'; //Подставится значение: "товар" } elseif ($m >= 1 && $m <= 4){ // Если значение $m больше или равно 1 и меньше или равно 4 echo $f = $a .'товара' . '<br>';// Подставится значение: "товара" } else { // Во всех остальных случаях echo $a .'товаров' . '<br>'; // Подставится: "товаров" } php?> |
Каким же образом понять, в какой момент нужно подставлять то или иное окончание?
Все довольно просто. Существует некая закономерность, благодаря которой склонение окончаний в цифрах постоянно повторяется. Для выявления последней необходимо прописать цифры в столбик в Exel и выявить эту закономерность.

Для начала рассмотрим 4 крайних столбца:
Каждый столбик имеет 3 группы, в которых окончания будут одинаковыми.
Как видим, цифры оканчивающиеся на 5,6,7,8,9,0 имеют окончание товаров
Цифры, оканчивающиеся на 2,3,4 имеют окончание товара
А цифры с окончанием 1, такие как: 21, 31, 41, 51 — это товар
В левой колонке дела обстоят несколько иначе, и если цифры от 0 до 4 подчиняются всем правилам, то склонение окончаний для диапазона чисел от 5 до 19 будут другими, поэтому первым, что необходимо сделать, начав писать код, так это сделать проверку в php для этого диапазона.
Эту проверку мы проводили с самого начала, в пятой строке кода:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php //$a = 0; //$m = $a%10; if ($a >= 5 && $a <= 20 ){ echo $f = $a .'товаров' .'<br>'; } //elseif ($m == 1){ // echo $f = $a .'товар' . '<br>'; //} //elseif ($m >= 1 && $m <= 4){ // echo $f = $a .'товара' . '<br>'; //} //else { // echo $a .'товаров' . '<br>'; //} php?> |
Теперь стоит разобраться, для чего нужна запись в четвертой строке кода.
|
1 |
$m = $a%10; |
Какое бы число не содержала переменная $a , разделив его на 10 мы всегда получим значение от 0 до 9. Записав это значение в переменную $m, сделаем еще 2 дополнительные проверки и закончим с решением задачи.
И так, в переменной $m теперь хранится значение от 0 до 9 и если $m == 1, то выводим значение: «товар», (8я и 10я строка кода).
|
1 2 3 |
elseif ($m == 1){ echo $f = $a .'товар' . '<br>'; } |
Исключим еще один диапазон чисел, остаток от деления которых будет равен 2,3 или 4. Запись в коде — с 12 по 14 строки.
|
1 2 3 |
elseif ($m >= 1 && $m <= 4){ echo $f = $a .'товара' . '<br>'; } |
Остается прописать последние строки, в которых укажем, что окончание во всех остальных случаях будет: «товаров«.
|
1 2 3 |
else { echo $a .'товаров' . '<br>'; } |
Быстро проверить исполнение скрипта возможно, поместив его содержимое в цикл for. Результатом исполнения будет вывод на экран чисел от 0 до 100.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php $a=0; for ($a; $a<=100; $a++){ echo $a; $m = $a%10; if ($a >= 5 && $a <= 20 ){ echo $f = 'товаров' . '<br>'; // Этой проверкой отбросим диапазон от 5 од 20. Окончание тут будет "ов" } elseif ($m == 1){ echo $f = 'товар' . '<br>'; } elseif ($m >= 1 && $m <= 4){ echo $f = 'товара' . '<br>'; } else { echo 'товаров' . '<br>'; } } ?php> |
Запишем подобный код, используя функцию:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php $a = 0; // Изначально $a = 0. Эту строку можно удалить, она нужна для понимания работы цикла с самого начала! function myfunction($a) { // Передаем это значение в функцию; $m = $a%10; // В $m будем хранить результат отатка от деления $a от 10; if ($a >= 5 && $a <= 20 ){ // Проверяем первое условие (изначально $a = 0) $f = 'товаров'; // Этой проверкой отбросим диапазон от 5 од 20. Окончание тут будет "ов" } elseif ($m == 1){ $f = 'товар'; } elseif ($m >= 1 && $m <= 4){ $f = 'товара'; } else { $f = 'товаров'; } return $f; // функция возвращает значение, хранящиеся в переменной $f (в зависимости от значения $a значение $f будет = "товар""товаров" или"товара") } // И так: $f хранится результат работы функции, т.е. проверка условия, или чему = $a for ($a = 0; $a <= 100; $a++){ // цикл))) echo $a . " " . myfunction($a) . '<br>'; // echo - значение } php?> |
Изменим код, добавив дополнительную переменную $h и в первой проверке будем подставлять ее значение. Такие доработки позволят выводить правильное значение на всех возможных вариантах.
Проверим выводимое значение до 1000:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$a = 0; // Изначально $a = 0. Эту строку можно удалить, она нужна для понимания работы цикла с самого начала! function myfunction($a) { // Передаем это значение в функцию; $h = $a%100; // В $h будем хранить результат отатка от деления $a от 100; $m = $a%10; // В $m будем хранить результат отатка от деления $a от 10; if ($h >= 5 && $h <= 20 ){ // Проверяем первое условие (изначально $a = 0) $f = 'товаров'; // Этой проверкой отбросим диапазон от 5 од 20. Окончание тут будет "ов" } elseif ($m == 1){ $f = 'товар'; } elseif ($m >= 1 && $m <= 4){ $f = 'товара'; } else { $f = 'товаров'; } return $f; // функция возвращает значение, хранящиеся в переменной $f (в зависимости от значения $a значение $f будет = "товар""товаров" или"товара") } // И так: $f хранится результат работы функции, т.е. проверка условия, или чему = $a for ($a = 0; $a <= 1000; $a++){ // цикл))) echo $a . " " . myfunction($a) . '<br>'; // echo - значение } |
Применим массив и передадим его значение в функцию, благодаря чему станет возможно подставлять значения для изменений в одном месте.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php $variant = ['товаров','товар', 'товара' ]; function myfunction($a, $variant) { $h = $a%100; $m = $a%10; if ($h >= 5 && $h <= 20 ){ $f = $variant[0]; } elseif ($m == 1){ $f = $variant[1]; } elseif ($m >= 1 && $m <= 4){ $f = $variant[2]; } else { $f = $variant[0]; } return $f; } for ($a = 0; $a <= 100; $a++){ echo $a . " " . myfunction($a, $variant) . '<br>'; } php?> |
Склонение окончаний в часах, часов
|
1 2 3 4 5 6 |
<form metod "GET" action="АДРЕС СТРАНИЦЫ, КУДА ПЕРЕДАЕТСЯ ФОРМА"> <input name="cch" type="text"> <br> <br> <input type="submit" value="ОК"> </form> |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php $cch = $_GET[cch]; echo '<br>' . $cch . '<br>'; // Выводит переданное значение if ($cch == 2 || $cch == 3 || $cch == 4 || $cch == 22 || $cch == 23) { $fin = 'a'; } elseif ($cch >= 5 && $cch <= 20) { $fin = 'ов'; } else { $fin == 'a'; } echo 'сейчас'. " " ./* date (h)*/ $cch ." ". 'час' .'<b>'. $fin . '</b>' . '<br>'; echo 'Теперь в зависимости от часов изменяется окончание'; php?> |
Для написания статьи материал и информация использовались с этого видео: