Весьма популярной проблемой, с которой сталкиваются Web-программисты , это склонение слов на PHP . Например, нужно вывести, сколько минут назад была оставлено какое-нибудь сообщение. Можно написать просто число и слово " минут ". Но тогда будет написано весьма странно, например, " 1 минут ", " 2 минут " и так далее....
Весьма популярной проблемой, с которой сталкиваются Web-программисты, это склонение слов на PHP. Например, нужно вывести, сколько минут назад была оставлено какое-нибудь сообщение. Можно написать просто число и слово "минут". Но тогда будет написано весьма странно, например, "1 минут", "2 минут" и так далее. Фактически, без склонения слов на PHP Вам не обойтись, если, конечно, Вы хотите писать по-русски.
Проблема новичкам покажется очень сложной, но, на самом деле, у склонения слов есть определённая закономерность. Посмотрите сами: "1 минута, 2 минуты, 5 минут, 11 минут, 19 минут, 21 минута, 22 минуты, 25 минут и так далее". Видите закономерность? 1, 21, 31, 41 - всегда будет "минута". Если младший разряд больше 1-го и меньше 5, при этом само число при делении на 100 имеет остаток больше 20 (то есть, например, не число 12 и не 112), то будут "минуты". В остальных случаях "минут".
А вот дальше уже начинается построение алгоритма, поскольку закономерность очевидно имеется. Я приведу Вам, на мой взгляд, самый красивый алгоритм. Он наиболее короткий, и в то же время очень быстрый.
<?php
function getWord($number, $suffix) {
$keys = array(2, 0, 1, 1, 1, 2);
$mod = $number % 100;
$suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)];
return $suffix[$suffix_key];
}
$array = array("минута", "минуты", "минут");
$n = 21;
$word = getWord($n, $array);
echo "$n $word<br />";
$n = 11;
$word = getWord($n, $array);
echo "$n $word<br />";
$n = 4;
$word = getWord($n, $array);
echo "$n $word<br />";
?>
Запустив данный скрипт Вы увидите, что склонение слов на PHP происходит на ура. Могу лишь добавить, что помимо "минут" там может быть "день", "час", "человек", "компьютер" и все другие существительные, которые склоняются в зависимости от числительного.
