Правильная печать слов во множественном числе

Задача
Необходимо правильно выбрать число – единственное или множественное – в зависимости от значения переменной. Например, вы возвращаете текст, который зависит от количества совпадений, найденных при поиске.

Решение
Это делается при помощи условного выражения:

$number = 4;
print "Your search returned $number " . ($number == 1 ? 'hit' : 'hits') . '.';
Your search returned 4 hits.


Обсуждение
Можно записать эту строку немного короче:

print "Your search returned $number hit" . ($number == 1 ? '' : 's') . '.';


Однако в других случаях образования множественного числа, таких как «person» → «people», очевидно, что надо изменить все слово, а не одну букву. Есть другой вариант – вызывать одну функцию для всех случаев образования множественного числа, как показано в функции pc_may_pluralize() из примера 2.2.

Пример 2.2. pc_may_pluralize()
function pc_may_pluralize($singular_word, $amount_of) {
    // массив особых слов во множественном числе
    $plurals = array(
        'fish' => 'fish',
        'person' => 'people',
    );
    // единственное значение
    if (1 == $amount_of) {
        return $singular_word;
    }
    // более одного, особая форма множественного числа
    if (isset($plurals[$singular_word])) {
        return $plurals[$singular_word];
    }
    // более одного, обычная форма множественного числа: 
    // добавить 's' в конце слова
    return $singular_word . 's';
}


Примеры:
$number_of_fish = 1;
print "I ate $number_of_fish " . pc_may_pluralize('fish', 
                                                  $number_of_fish) . '.';
$number_of_people = 4; 
print 'Soylent Green is ' . pc_may_pluralize('person', 
                                             $number_of_people) . '!';

I ate 1 fish.
Soylent Green is people!

Если в коде предполагается наличие нескольких слов во множественном числе, то нужна функция, облегчающая чтение, такая как pc_may_pluralize(). Этой функции передается слово в единственном числе в качестве первого аргумента и количество включений в качестве второго аргумента. В функцию включен большой массив, $plurals, содержащий все особые случаи. Если переменная $amount равна 1, то функция возвращает оригинальное слово. Если переменная больше единицы, то возвращается слово в особой форме множественного числа, если такая существует. По умолчанию добавляется только «s» в конце слова.
Теги:
number, pluralize, people, множественного, singular, print, plurals, слово, числа, return, множественном, returned, amount, person, search, Soylent, Green, массив, образования, форма, функцию, одного, функции, конце, числе, функция, числе , качестве, аргумента, числа , добавляется, array, значение , умолчанию, существует
Добавлено: 17 Июля 2018 07:34:11 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...