1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Склонение слов

Тема в разделе 'PHP', создана пользователем mr.Slink, 28 апр 2010.

  1. TopicStarter Overlay

    mr.Slink Пользователи

    Сообщения:
    261
    Лайки:
    92
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    odoRemasrered
    Страна:
    Russian Federation Russian Federation
    Смешно звучит, правда? А ведь такие уродливые сочетания встречаются на очень многих сайтах. И если в английском языке достаточно написать что-то типа day(s), byte(s) и это будет смотреться вполне нормально, то в русском языке в конструкциях "число + слово" обязательно придется учитывать склонения. Безумные извраты типа "гостя(ей)" и "новость(ей)" я даже не рассматриваю, за такое надо лишать доступа к компьютеру навсегда.

    Чтобы писать по-русски можно использовать следующую универсальную функцию:
    Код:
    <?php
    function num2word($num,$words) {
    $num=$num%100;
    if ($num>19) { $num=$num%10; }
    switch ($num) {
    case 1:  { return($words[0]); }
    case 2: case 3: case 4:  { return($words[1]); }
    default: { return($words[2]); }
    }
    }
    ?>
    Параметры вызова: $num - число, $words - массив склонений нужного слова. Как формируется массив вы можете посмотреть на примерах.


    Код:
    <?php
    // Гостей
    $num1=2;
    $words1=Array("гость", "гостя", "гостей");
    
    // Новостей 
    $num2=3;
    $words2=Array("новость", "новости", "новостей");
    
    // Написать по-русски
    echo "Сейчас на сайте ";
    echo $num1." ".num2word($num1,$words1); // сколько гостей
    echo " и ";
    echo $num2." ".num2word($num2,$words2); // сколько новостей
    ?>
    Результат работы скрипта:
    Чтобы было удобнее формировать массивы со склонениями, запомните ряд чисел 1-2-5, а потом мысленно подставляйте их в массив: (один "рубль", два "рубля", пять "рублей") или (одна "новость", две "новости", пять "новостей").

    Автор: ManHunter
Черновик сохранён Черновик удалён

Поделиться этой страницей