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

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

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

$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» в конце слова.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Взятие логарифмов
Вычисление степеней
Вычисление тригонометрических функций
Вычисления с не десятичными числами
Генерация случайных чисел в пределах диапазона

Вернуться в раздел: PHP / 2. Числа