Number suffix
Adds a suffix to a given number (1st, 2nd, 3rd, ...)
// Also, increasing the range above the condition statements // increases efficiency. That's almost 20% of the numbers // between 0 and 100 that get to end early. function number_suffix($number){ // Validate and translate our input if ( is_numeric($number)){ // Get the last two digits (only once) $n = $number % 100; } else { // If the last two characters are numbers if ( preg_match( '/[0-9]?[0-9]$/', $number, $matches )){ // Return the last one or two digits $n = array_pop($matches); } else { // Return the string, we can add a suffix to it return $number; } } // Skip the switch for as many numbers as possible. if ( $n > 3 && $n < 21 ) return $number . 'th'; // Determine the suffix for numbers ending in 1, 2 or 3, otherwise add a 'th' switch ( $n % 10 ){ case '1': return $number . 'st'; case '2': return $number . 'nd'; case '3': return $number . 'rd'; default: return $number . 'th'; } }
Author:
namik at hub-cafe dot net (found in an php.net comment)
License:
?
Language:
PHP
Created:
04/05/2006
Updated:
04/05/2006
Tags:
numbers, format
Sorry folks, comments have been deactivated for now due to the large amount of spam.
Please try to post your questions or problems on a related programming board, a suitable mailing list, a programming chat-room,
or use a QA website like stackoverflow because I'm usually too busy to answer any mails related
to my code snippets. Therefore please just mail me if you found a serious bug... Thank you!
Older comments:
12 returns 12nd not 12th
13 returns 13rd not 13th
111 returns 111st not 111th
... etc
function number_suffix ($n) {
$suffix = 'th';
if(!($n >= 10 && $n < 20)) {
$s = array ('st','nd','rd');
$s = $s[$n % 10 - 1];
$suffix = $s ? $s : 'th';
}
return $n . $suffix;
}
{
$suffix = 'th';
if(!($n >= 10 && $n < 20));
{
$s = ['st','nd','rd'];
$s = $s[$n % 10 - 1];
$suffix = $s ? $s : 'th';
}
return $n . $suffix;
}