Разработчику. Сборник рецептов PHP
Задавайте вопросы

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

Вернуться назад

Задача

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

Решение

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

$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() из примера:

Пример №1:

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» в конце слова.(Применительно к словам английского языка)

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования


Рейтинг Сайтов ДОСКИ.РУ