Функция cot_declension в Cotonti

используется для правильного склонения числительных с учетом множества форм для различных слов или выражений в зависимости от количества (например, "1 товар", "2 товара", "5 товаров")

Функция cot_declension используется для правильного склонения числительных с учетом множества форм для различных слов или выражений в зависимости от количества (например, "1 товар", "2 товара", "5 товаров").
Код функции:
 
 

function cot_declension($digit, $expr, $onlyword = false, $canfrac = false)
{
    global $lang, $Ls;

    // Проверка, если $expr является строкой и существует соответствующий перевод в массиве $Ls
    $expr = is_string($expr) && isset($Ls[$expr]) ? $Ls[$expr] : $expr;

    // Разделение строки $expr на массив, если она содержит запятую
    if (is_string($expr) && mb_strpos($expr, ',') !== false) {
        $expr = preg_split('#\s*,\s*#', $expr);
    }

    // Если $expr не является массивом, то возвращаем строку с числом и словом
    if (!is_array($expr)) {
        return trim(($onlyword ? '' : "$digit ") . $expr);
    }

    // Обработка дробных чисел
    $isFrac = false;
    if ($canfrac) {
        if ((is_float($digit) && $digit != floor($digit)) || mb_strpos($digit, '.') !== false) {
            $i = (float) $digit;
            $isFrac = true;
        } else {
            $i = (int) $digit;
        }
    } else {
        $i = !empty($digit) ? intval(preg_replace('#\D+#', '', $digit)) : 0;
    }

    // Получение правильной формы числа (ед. число, мн. число и т.д.)
    $plural = cot_get_plural($i, $lang, $isFrac);
    $cnt = count($expr);

    // Возвращаем нужную форму выражения в зависимости от числа
    return trim(($onlyword ? '' : "$digit ") . (($cnt > 0 && $plural < $cnt) ? $expr[$plural] : ''));
}


Пояснение:

Глобальные переменные:

$lang — текущий язык, используется для определения формы числа.
$Ls — глобальный массив, содержащий переводы или формы слов для разных языков.
Проверка и перевод выражения:

Если $expr является строкой и существует соответствующий перевод в массиве $Ls, то строка переводится на текущий язык. Например, если в $Ls есть запись для слова "item" на текущем языке, оно будет заменено на нужный перевод.
Разделение строки на массив:

Если строка $expr содержит запятую, она разделяется на массив. Например, строка "item, items" будет разделена на массив ["item", "items"].


Обработка чисел с учетом дробных значений:

Если параметр $canfrac установлен в true, функция проверяет, является ли число дробным. Если это так, переменная $i принимает значение как float, иначе — как целое число.
Если $canfrac не установлен, функция просто извлекает целую часть из числа.
Получение правильной формы числа:

Функция cot_get_plural используется для получения правильной формы слова в зависимости от числа. Она принимает количество, текущий язык и информацию о дробной части числа.
Выбор правильной формы слова:

В зависимости от полученной формы (единственное или множественное число) выбирается нужная форма слова из массива $expr. Если слов в массиве больше одного, то используется форма, соответствующая числу.
Возвращаемое значение:

Возвращается строка с числом и соответствующим словом. Если параметр $onlyword равен true, то возвращается только слово без числа.


Пример использования:


Пример с простыми числами:
 
echo cot_declension(1, 'item'); // Выведет "1 item"
echo cot_declension(2, 'item'); // Выведет "2 items"


Пример с множественными формами:
 
echo cot_declension(1, 'apple, apples'); // Выведет "1 apple"
echo cot_declension(3, 'apple, apples'); // Выведет "3 apples"

Пример с дробными числами:
 
echo cot_declension(1.5, 'item, items', false, true); // Выведет "1.5 items"


Резюме:
Функция cot_declension полезна для корректного склонения слов в зависимости от числа и формы числа (например, "1 товар", "2 товара", "5 товаров"). Она учитывает дробные числа и поддерживает различные языковые формы.

3 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 23.01.2025 23:59
  • Последнее обновление: 23.01.2025 23:59