diff --git a/functions/func.locale.php b/functions/func.locale.php index d7a2550..b70531a 100644 --- a/functions/func.locale.php +++ b/functions/func.locale.php @@ -861,15 +861,37 @@ function prepare_fname($st) return $value . $ago; } +/* + * Функция склонения слов в зависимости от числа. + * * Пример использования: + * echo date_phrase(5, ['событие', 'события', 'событий']); + * // Вернет: "событий" + * * Индексы в массиве $titles: + * 0 - для чисел заканчивающихся на 1 (кроме 11) + * 1 - для чисел заканчивающихся на 2, 3, 4 (кроме 12, 13, 14) + * 2 - для чисел от 5 до 19 и остальных случаев + */ - function date_phrase($number, $titles) - { - $cases = array( 2, 0, 1, 1, 1, 2 ); +function date_phrase($number, $titles) +{ + // Принудительно приводим к числу (пустая строка станет 0) + $number = (int)$number; + + // Проверяем, что $titles — это массив и он не пуст + if (empty($titles) || !is_array($titles)) { + return ''; + } - return $titles[($number % 100 > 4 && $number % 100 < 20) - ? 2 - : $cases[min($number % 10, 5)]]; - } + $cases = array( 2, 0, 1, 1, 1, 2 ); + + // Определяем индекс + $index = ($number % 100 > 4 && $number % 100 < 20) + ? 2 + : $cases[min($number % 10, 5)]; + + // Возвращаем результат, проверяя наличие ключа + return $titles[$index] ?? ($titles[0] ?? ''); +} /**