Мне нравится ответ Джеймса Константино.Просто и эффективно, и вы обязательно освоите каждый случай на любом языке.Хотя нужно написать больше кода (в два раза больше общей части слова, а именно).
Мне также, конечно, нравится решение TBrianJones, но оно работает только с английским (как есть. Я могу легко улучшить егодля моих обычных европейских языков, немецкого, французского, испанского, итальянского и португальского).Спасибо за это.Если вам известна частота употребления слов, вы можете оптимизировать их, реорганизовав строки.
Также предложение Фелипе является хорошим и, кстати, плебисцитировано.
Но в каждом решении янашел то, что я считаю ошибкой: каждый из вас использует форму единственного числа только для значения 1, а форму множественного числа для всех остальных случаев.Что, очевидно, неправильно для отрицательных значений, но также - по крайней мере на французском - для значений, строго меньших 2.
Итак, вот мое предложение, взятое за код Джеймса за основу, оптимизировано:
function singleOrPlural($amount, $singular, $plural) {
return (abs($amount)>=2
? $amount.' '.$plural
: $amount.' '.$singular
);
}
Таким образом, код типа
echo "We bought ".singleOrPlural(1.5, "pound", "pounds")
." of apples and ".singleOrPlural(2, "pound", "pounds")." of bread.";
даст
We bought 1.5 pound of apples and 2 pounds of bread.
, что является правильным.
Для нулевого значения я не могу понять причинумножественное число, так как объект отсутствует, но, возможно, англосаксонские аборигены используются с этим.
HTH, M.