ФорумПрограммированиеПыхнуть хотите?Готовые решения → PHP Функция для расчета правильного склонения множественного числа

PHP Функция для расчета правильного склонения множественного числа

  • fgets2

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 11 апреля 2011 г. 14:03

    		/**
    * Функция rmany
    * Служит для выбора правильного склонения множественного числа
    *
    * @param string $nominative - 1 яблоко
    * @param string $quantitative_ablative - 2 яблока
    * @param string $accusative - 10 яблок
    * @param integer $count - количество элементов
    *
    * Пример вызова:
    * echo rmany('яблоко', 'яблока', 'яблок', 86); // результат "яблок"
    *
    * @return string
    */
    function rmany ($nominative, $quantitative_ablative, $accusative, $count)
    {
    /* дополняем число нулями и забираем последние две цифры */
    $count = intval(substr(sprintf("%010d", $count), -2, 2));
    /* выполняем расчёт и возвращаем нужный падеж */
    $ln = substr(strval($count), -1);
    if (($ln === 0) or (in_array($ln, range(5,9))) or (in_array($count, range(10,20)))) {
    return $accusative;
    } elseif (in_array($ln, range(2,4)) {
    return $quantitative_ablative;
    } else {
    return $nominative;
    }
    }
    Спустя 223 сек.

    	/**
    * Функция rmany
    * Служит для выбора правильного склонения множественного числа
    *
    * @param string $nominative - 1 яблоко
    * @param string $quantitative_ablative - 2 яблока
    * @param string $accusative - 10 яблок
    * @param integer $count - количество элементов
    *
    * Пример вызова:
    * echo rmany('яблоко', 'яблока', 'яблок', 86); // результат "яблок"
    *
    * @return string
    */
    function rmany ($nominative, $quantitative_ablative, $accusative, $count)
    {
    /* дополняем число нулями и забираем последние две цифры */
    $count = intval(substr(sprintf("%010d", $count), -2, 2));
    /* выполняем расчёт и возвращаем нужный падеж */
    $ln = substr(strval($count), -1);
    if (($ln === 0) or (in_array($ln, range(5,9))) or (in_array($count, range(10,20)))) {
    return $accusative;
    } elseif (in_array($ln, range(2,4))) {
    return $quantitative_ablative;
    } else {
    return $nominative;
    }
    }



    фикс, скобочку нечаянно удалил при копировании :)
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 11 апреля 2011 г. 14:03, спустя 8 секунд

    http://pyha.ru/forum/topic/4993.msg111072#msg111072
    Высокоуровневое абстрактное говно
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 11 апреля 2011 г. 14:04, спустя 56 секунд

    <?php
    function smarty_modifier_strend($num, $endings = '')
    {
    list($s1,$s2,$s3) = explode(',', $endings);
    $num = abs($num);
    $num = $num % 100;

    if (($num > 4) && ($num < 21)) {
    return $s3;
    }
    $num = $num % 10;
    if (($num == 0) || ($num > 4)) {
    return $s3;
    }
    if ($num == 1) {
    return $s1;
    }

    return $s2;
    }


    {$count} яблок{$count|strend:"о,а,"}


    автор функции вроде vasa_c)
    сто лет назад где-то на пихе увидел и себе в плагины смарти/квики захуярил
    все умрут, а я изумруд
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 11 апреля 2011 г. 14:05, спустя 55 секунд

    фикс, скобочку нечаянно удалил при копировании :)

    мама не учила не копировать через Ctrl+X?))
    Высокоуровневое абстрактное говно
  • fgets2

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 11 апреля 2011 г. 14:06, спустя 1 минуту 35 секунд

    	/**
    * Функция rmany
    * Служит для выбора правильного склонения множественного числа
    *
    * @param string $nominative - 1 яблоко
    * @param string $quantitative_ablative - 2 яблока
    * @param string $accusative - 10 яблок
    * @param integer $count - количество элементов
    *
    * Пример вызова:
    * echo rmany('яблоко', 'яблока', 'яблок', 86); // результат "яблок"
    *
    * @return string
    */
    function rmany ($nominative, $quantitative_ablative, $accusative, $count)
    {
    /* дополняем число нулями и забираем последние две цифры */
    $count = intval(substr(sprintf("%010d", $count), -2, 2));
    /* выполняем расчёт и возвращаем нужный падеж */
    $ln = intval(substr(strval($count), -1));
    if (($ln === 0) or (in_array($ln, range(5,9))) or (in_array($count, range(10,20)))) {
    return $accusative;
    } elseif (in_array($ln, range(2,4))) {
    return $quantitative_ablative;
    } else {
    return $nominative;
    }
    }

    и еще один фикс, забыл к числу привести $ln)))
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 11 апреля 2011 г. 14:07, спустя 38 секунд

    fgets2, вы с братом отменные гавнокодеры! после школя обязательно иди в политех на тракториста! программист пока не очень получился
    Сапожник без сапог
  • fgets2

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 11 апреля 2011 г. 14:07, спустя 20 секунд


    <?php
    function smarty_modifier_strend($num, $endings = '')
    {
    list($s1,$s2,$s3) = explode(',', $endings);
    $num = abs($num);
    $num = $num % 100;

    if (($num > 4) && ($num < 21)) {
    return $s3;
    }
    $num = $num % 10;
    if (($num == 0) || ($num > 4)) {
    return $s3;
    }
    if ($num == 1) {
    return $s1;
    }

    return $s2;
    }


    {$count} яблок{$count|strend:"о,а,"}


    автор функции вроде vasa_c)
    сто лет назад где-то на пихе увидел и себе в плагины смарти/квики захуярил


    а если будут линейки, шторы?
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 11 апреля 2011 г. 14:09, спустя 1 минуту 12 секунд

    а если будут линейки, шторы?

    а если будут пальто? XDD
    Высокоуровневое абстрактное говно
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 11 апреля 2011 г. 14:13, спустя 4 минуты 12 секунд

    а если будут линейки, шторы?

    {$count} {$count|strend:"яблоко,линейка,штора"}

    Спустя 10 сек.
    говорю же логики у вас не хватает чуток …
    Сапожник без сапог
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 11 апреля 2011 г. 14:18, спустя 5 минут 30 секунд

    а если будут линейки, шторы?

    ты не поверишь)

    {$count} лине{$count|strend:"йка,йки,ек"}
    {$count} штор{$count|strend:"а,ы,"}
    все умрут, а я изумруд
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 11 апреля 2011 г. 16:19, спустя 2 часа 37 секунд

    Дуд, ты аккуратней… Вдвоем ведь могут и отпиздить)))
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 11 апреля 2011 г. 16:25, спустя 5 минут 44 секунды

    SpartakuS, а я убегу хули :D
    Сапожник без сапог
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 11 апреля 2011 г. 16:35, спустя 10 минут 20 секунд

    васяц охуенен
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 11 апреля 2011 г. 22:30, спустя 5 часов 55 минут 32 секунды

    сколько можно переизобретать ngettext ?
    ιιlllιlllι унц-унц
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 12 апреля 2011 г. 1:37, спустя 3 часа 6 минут 44 секунды

    artoodetoo, ngettext для русских как-то не очень
    не всё полезно, что в swap полезло

Пожалуйста, авторизуйтесь, чтобы написать комментарий!