PHP 1st, 2nd, 3rd, 4th, 5th, 6th – PHP Add Ordinal Number Suffix

This is simple function to add English ordinal number suffix after normal number. Function takes number as a parameter and returns number with suffix, like:
1st, 2nd, 3rd, 4th, 5th, 6th…

This is example table of ordinal numbers 1 to 100

1st	 2nd	 3rd	 4th	 5th	 6th	 7th	 8th	 9th	 10th
11th	12th	13th	14th	15th	16th	17th	18th	19th	20th
21st	22nd	23rd	24th	25th	26th	27th	28th	29th	30th
31st	32nd	33rd	34th	35th	36th	37th	38th	39th	40th
41st	42nd	43rd	44th	45th	46th	47th	48th	49th	50th
51st	52nd	53rd	54th	55th	56th	57th	58th	59th	60th
61st	62nd	63rd	64th	65th	66th	67th	68th	69th	70th
71st	72nd	73rd	74th	75th	76th	77th	78th	79th	80th
81st	82nd	83rd	84th	85th	86th	87th	88th	89th	90th
91st	92nd	93rd	94th	95th	96th	97th	98th	99th	100th

Add Ordinal Suffix PHP Function

<?php
 
  function addOrdinalNumberSuffix($num) {
    if (!in_array(($num % 100),array(11,12,13))){
      switch ($num % 10) {
        // Handle 1st, 2nd, 3rd
        case 1:  return $num.'st';
        case 2:  return $num.'nd';
        case 3:  return $num.'rd';
      }
    }
    return $num.'th';
  }
 
?>

Add Ordinal Suffix PHP Function Usage/Testing

for ($i = 1; $i <= 10000; $i++){
  echo addOrdinalNumberSuffix($i) . "\t";
  if ($i % 10 == 0) {
    echo "\n";
  }
}

Output:

1st	2nd	3rd	4th	5th	6th	7th	8th	9th	10th	
11th	12th	13th	14th	15th	16th	17th	18th	19th	20th	
21st	22nd	23rd	24th	25th	26th	27th	28th	29th	30th	
31st	32nd	33rd	34th	35th	36th	37th	38th	39th	40th	
41st	42nd	43rd	44th	45th	46th	47th	48th	49th	50th	
51st	52nd	53rd	54th	55th	56th	57th	58th	59th	60th	
61st	62nd	63rd	64th	65th	66th	67th	68th	69th	70th	
71st	72nd	73rd	74th	75th	76th	77th	78th	79th	80th	
81st	82nd	83rd	84th	85th	86th	87th	88th	89th	90th	
91st	92nd	93rd	94th	95th	96th	97th	98th	99th	100th	
101st	102nd	103rd	104th	105th	106th	107th	108th	109th	110th
...
9961st	9962nd	9963rd	9964th	9965th	9966th	9967th	9968th	9969th	9970th	
9971st	9972nd	9973rd	9974th	9975th	9976th	9977th	9978th	9979th	9980th	
9981st	9982nd	9983rd	9984th	9985th	9986th	9987th	9988th	9989th	9990th	
9991st	9992nd	9993rd	9994th	9995th	9996th	9997th	9998th	9999th	10000th
Follow If Not True Then False Updates!

20 Comments

  1. This article is far too complicated. All I want to know is how to add -st, -nd -rd- and -th to numbers and dates. My spelling check just wont add them to the dictionary. HELP!

    • Hi Lucy,

      So could you tell more specific, what are you doing, if this is too complicated?

  2. work perfectly! thanx!

  3. lately i am seeing 1st , 2nd, 3rd, being written as 1th, 2th, 3th
    Can anyone explain the concept behind this?

  4. Brilliant! Thank you!

  5. You guys are great! Keep it up! =))

  6. Thanks. good explanation.

  7. Thank you! You saved me some brain cells!

  8. :D

  9. Third class

  10. Thanks for this function..

  11. Simple it is not, when it doesn’t provide a echo result!!!!

    we have a $num = 26

    the result is =

    exactly

    I think karen had a POINT – a simple solution to a simple problem, one that works.

    so what is the answer for 26 = 26st or or 26nd or 26rd or 26th

    your function returns =

    exactly karen’s point.

    • Hi Clive,

      Just tested and this function returns 26th as it should return…could you post your code?

      If you try/run exactly following code:

      <?php
       
        function addOrdinalNumberSuffix($num) {
          if (!in_array(($num % 100),array(11,12,13))){
            switch ($num % 10) {
              // Handle 1st, 2nd, 3rd
              case 1:  return $num.'st';
              case 2:  return $num.'nd';
              case 3:  return $num.'rd';
            }
          }
          return $num.'th';
        }
       
        echo addOrdinalNumberSuffix(26), "\n";

      What is your output??

  12. OK I am not joking either ===

    Server error
    The website encountered an error while retrieving http://polishpotterymanufaktura.co.uk/assets/TimeLine_HISTORY/test26.php. It may be down for maintenance or configured incorrectly.

    Here is a LINK:::

    http://polishpotterymanufaktura.co.uk/assets/TimeLine_HISTORY/test26.php

    your code

    <?php

    function addOrdinalNumberSuffix($num) {
    if (!in_array(($num % 100),array(11,12,13))){
    switch ($num % 10) {
    // Handle 1st, 2nd, 3rd
    case 1: return $num.'st';
    case 2: return $num.'nd';
    case 3: return $num.'rd';
    }
    }
    return $num.'th';
    }

    echo addOrdinalNumberSuffix(26), "\n";

    ?>

    NOTE:: I added ?> also removed pre php at the head, but still SERVER ERROR!

    Clive Moore

    • What shows your access.log and error.log?

      Could you add example following code on same location to another file:

      <?php
       
        phpinfo();
       
      ?>

      Is it working?

      And if you have just mine code on this test26.php file, then you could simply login your server and run following command:

      ## Replace following path with your real path ##
      php /your/www/path/assets/TimeLine_HISTORY/test26.php

      What is output?

  13. Can you tell me how to use it in my case? how would I call the addOrdinalNumberSuffix and apply it to $query_data[4]? column 4 is filled with days 1 to 31

    and yes I know my php skills suck..

    <?php
    mysql_connect("localhost", "user", "pass") or die (mysql_error ());
    mysql_select_db("intranetbday") or die(mysql_error());

    function addOrdinalNumberSuffix($num) {
    if (!in_array(($num % 100),array(11,12,13))){
    switch ($num % 10) {
    // Handle 1st, 2nd, 3rd
    case 1: return $num.'ste';
    case 2: return $num.'nd';
    case 3: return $num.'rd';
    }
    }
    return $num.'de';
    }

    $result = mysql_query("SELECT * FROM verjaarsdae WHERE WEEK( BD ) = WEEK( NOW() +1 ) LIMIT 0, 30 ");
    $personeelWatVerjaar = mysql_num_rows($result);
    echo "”;
    echo “”,”",”Die week se verjaarsdae”,”",”" ;
    for($i=0;$i<$personeelWatVerjaar;$i++)
    {

    $query_data = mysql_fetch_row($result);

    echo "”,”", $query_data[4], “”,”",”“,$query_data[1],”“, “”,”",$query_data[3], “”, “”;

    }
    echo “”;
    ?>

    • Hi Jankoos,

      So just pass that $query_data[4] to addOrdinalNumberSuffix function, like:

      echo "This is query_data[4] value, with ordinal number suffix: " . addOrdinalNumberSuffix($query_data[4]);

      Few other notes, mysql funtions are deprecated on PHP 5.5, so it’s better use PDO or at least mysqli instead mysql and more elegant way to do this loop is example following:

      $result = mysql_query("SELECT field1, field2, field3 FROM verjaarsdae WHERE WEEK( BD ) = WEEK( NOW() +1 ) LIMIT 0, 30 ");
       
      while ($row = mysql_fetch_assoc($result)) {
          echo $row["field1"];
          echo $row["field2"];
          echo $row["field3"];
      }

      Replace field1, field2, fiedl3…with your real field names or if you want really use numeric array, then use mysql_fetch_array instead mysql_fetch_assoc, but this is little bit risky, if you change your mysql table, then numeric array might be different.

  14. This function worked well for me. Thanks.

  15. it will through some syntex error

    • Hi a,

      Could you post errors? And PHP version?

Add Comment Register



Leave a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>