There’s a good chance you’ve seen it before (and possibly authored it), it looks something like this “You have 1 new messages” or “There are 10 user(s) logged in”. What you end up with is something that’s either incorrect or something like looks a bit amateurish. To fix this, we just need a bit of logic of course ;) All you need to do is check how many we have and output the word accordingly:

echo 'You have ' . $new . ' new ' . ($new == 1 ? 'message' : 'messages');
// a slightly shorter version:
echo 'You have ' . $new . ' new message' . ($new == 1 ? '' : 's');

This gets cumbersome so most of us resort to writing our own helper function that accomplishes this. Fortunately, PHP actually has a function that can accomplish this:

echo 'There ' . ngettext('is', 'are', $online) . ' ' . $online . ' ' . ngettext('user', 'users', $online) . ' logged in';

ngettext() takes 3 arguments, the singular version of a word, the plural version and the integer value to use to determine which to use.

Both of these are very simple examples on how to pluralize a word and can easily be used to handle complex plural words like mice or octopi. If you’re looking for more complex solution where you can simply pass in a word and number and get the plural back, check out Paul Osman’s PHP Pluralize Method.

Did you enjoy this post?

Cool if I slip into your inbox with more?
Full posts, 1-2 times per week: