7

Получение правильной формы слова для разного количества

/**
 * Получить правильную форму числа для количества элементов.     
 * @param integer $number - количество
 * @param array $wordsForms массив с 3-мя элементами, например такой: array('0'=>'Запись','1'=>'Записи','2'=>'Записей')
 *                          Элементы в нем - это формы слова для количеств соответствуенно 1, 2 и 5 
 * @return string возвращает правильную форму слова. Например, для входного числа 1021 вернет "Запись", для 12 вернет "Записей", для 652 вернет "Записи"
 */
function numberForm($number,$wordsForms)
{
   $cases = array(2, 0, 1, 1, 1, 2);
   return $wordsForms[($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)]]; 
}
// Тестируем:
echo "1 " . numberForm(1, array('Звонок','Звонка','Звонков') . "\n";
echo "11 " . numberForm(11, array('Звонок','Звонка','Звонков') . "\n";
echo "52 " . numberForm(52, array('Звонок','Звонка','Звонков') . "\n";
echo "1025 " . numberForm(1025, array('Звонок','Звонка','Звонков') . "\n";
1 Звонок
11 Звонков
52 Звонка
1025 Звонков
-----------