Hy_ok
@Hy_ok

Где достать либу для склонения слов и приведение их к числу?

В общем, суть в том. что есть задачка, генерация тайтлов и дескрипшен, для сео(бред полнейший как для меня, то что по хорошему их в ручную вбивают при создании категории и прочего), так вот генерация идет на основе категорий брендов подкатегорий, и местами нужно склонять слова и приводить их к разному число(множественному и единственному), первый раз с таким столкнулся, может кто нибкдь подскажет какую нибудь библиотеку?
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
ice2038
@ice2038
Есть два отличных решения Morphos и Morpher . Второе платное, но если использовать как веб-сервис, то бесплатного лимита хватает на простые задачи.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
sergiks
@sergiks Куратор тега PHP
♬♬
Если вам просто нужно правильно склонять слова, в зависимости от числа, то это всего несколько строк (на разных ЯП). На PHP:
/**
 * Функция возвращает окончание для множественного числа слова на основании числа и массива окончаний
 * param  $number Integer Число на основе которого нужно сформировать окончание
 * param  $endingsArray  Array Массив слов или окончаний для чисел (1, 4, 5),
 *         например array('яблоко', 'яблока', 'яблок')
 * return String
 */
function getNumEnding($number, $endingArray)
{
    $number = $number % 100;
    if ($number>=11 && $number<=19) {
        $ending=$endingArray[2];
    }
    else {
        $i = $number % 10;
        switch ($i)
        {
            case (1): $ending = $endingArray[0]; break;
            case (2):
            case (3):
            case (4): $ending = $endingArray[1]; break;
            default: $ending=$endingArray[2];
        }
    }
    return $ending;
}
Ответ написан
u1tr0n
@u1tr0n
вот хорошая либа многое умеет php_rutils
Ответ написан
Комментировать
Использую эту функцию на своих проекта, чтобы поставить нужное окончание для слова в зависимости от числа.
Пример: 5000 фишка => 5000 фишек.

Пример кода в комментарии к функции.

/**
     * Вывод окончания слова в зависимости от значения числа
     * Пример: 5000 фишка => 5000 фишек
     * echo '5000 фиш'.Common::trueEnd(5000, 'ка', 'ки', 'ек');
     *
     * Как задать параметры: выводим начало слова, а окончание выведет функция
     * n1 - 1 фиш-ка
     * n2 - 2 фиш-ки
     * n5 - 5 фиш-ек
     * @param int $number
     * @param string $n1
     * @param string $n2
     * @param string $n5
     * @return string
     */
    public static function trueEnd($number, $n1, $n2, $n5)
    {
        $number = (is_array($number)) ? count($number) : (int) $number;
        $ch = (int) substr($number, -2);
        if ($ch > 4 and $ch < 21) return $n5;
        $ch = (int) substr($number, -1);
        if ($ch == 1) return $n1;
        return ($ch > 1 and $ch < 5) ? $n2: $n5;
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы