Для красоты вывода информации, иногда приходится склонять числительные.
Например: 1 комментарий, 2 комментария, 10 комментариев, 101 комментарий, 151 комментарий, 511 комментариев, 777 комментариев, 1001 комментарий и т.д.
Функция склонения числительных
Пишем простую функцию string numberof(int numberof, string value, array suffix)
<?php
/**
* Склонение числительныхфывфывфывф
* @param int $numberof — склоняемое число
* @param string $value — первая часть слова (можно назвать корнем)
* @param array $suffix — массив возможных окончаний слов
* @return string
*
*/
function numberof($numberof, $value, $suffix)
{
$keys = array(2, 0, 1, 1, 1, 2);
$mod = $numberof % 100;
$suffix_key = $mod > 4 && $mod < 20 ? 2 : $keys[min($mod%10, 5)];
return $value . $suffix[$suffix_key];
}
// значения
$values = array(1, 2, 10, 101, 151, 511, 777, 1001);
// перебираем массив
foreach ($values as $number)
{
echo $number.' ';
// получаем нужное склонение
echo numberof($number, 'комментари', array('й', 'я', 'ев'));
echo '<br>';
}
?>
Результат
На экране вы увидите:
1 комментарий
2 комментария
10 комментариев
101 комментарий
151 комментарий
511 комментариев
777 комментариев
1001 комментарий
Разъяснение по слову «комментарий»
Слово комментарий может принимать всего 3 значения: комментари(й), комментари(я), комментари(ев).
Алгоритм
Число заканчивающееся на 1 (1, 21, 31, 101, 1001, 1161 и т.д.), исключение 11, получает первое окончание:комментари(й)
Далее все числа в диапазоне от 2 до 4 (2-4, 22-24, 32-34, 102-104, 1122-1124), исключение 12-14, получает второе окончание: комментари(я)
Все остальные числа получают значение комментари(ев)
Примечание
P.S.: Реализовать алгоритм можно разными способами, но, способ показанный выше, мне кажется, самый короткий. Можно обойтись двумя строками, только читаемость кода ухудшится.