Числа дисплея с порядковым суффиксом в PHP

Я хочу отобразить числа следующим образом

  • 1 как 1-й,
  • 2 как 2-й,
  • ...,
  • 150 как 150-й.

Как я должен найти корректный порядковый суффикс (Св., без обозначения даты, ул. или th) для каждого числа в моем коде?

139
задан ArK 27 October 2015 в 12:09
поделиться

3 ответа

из википедии :

$ends = array('th','st','nd','rd','th','th','th','th','th','th');
if (($number %100) >= 11 && ($number%100) <= 13)
   $abbreviation = $number. 'th';
else
   $abbreviation = $number. $ends[$number % 10];

Где $ number - это число, которое вы хотите написать. Работает с любым натуральным числом.

Как функция:

function ordinal($number) {
    $ends = array('th','st','nd','rd','th','th','th','th','th','th');
    if ((($number % 100) >= 11) && (($number%100) <= 13))
        return $number. 'th';
    else
        return $number. $ends[$number % 10];
}
//Example Usage
echo ordinal(100);
273
ответ дан 23 November 2019 в 23:16
поделиться

Вот однострочный текст:

$a = <yournumber>;
echo $a.substr(date('jS', mktime(0,0,0,1,($a%10==0?9:($a%100>20?$a%10:$a%100)),2000)),-2);

Вероятно, самое короткое решение. Конечно, можно обернуть функцией:

function ordinal($a) {
  // return English ordinal number
  return $a.substr(date('jS', mktime(0,0,0,1,($a%10==0?9:($a%100>20?$a%10:$a%100)),2000)),-2);
}

С уважением, Пол

РЕДАКТИРОВАТЬ1: Исправление кода для 11–13.

РЕДАКТИРОВАНИЕ2: Исправление кода для 111, 211, ...

РЕДАКТИРОВАНИЕ3: Теперь он работает правильно также для кратных 10.

14
ответ дан 23 November 2019 в 23:16
поделиться

из http://www.phpro.org/examples/Ordinal-Suffix.html

<?php

/**
 *
 * @return number with ordinal suffix
 *
 * @param int $number
 *
 * @param int $ss Turn super script on/off
 *
 * @return string
 *
 */
function ordinalSuffix($number, $ss=0)
{

    /*** check for 11, 12, 13 ***/
    if ($number % 100 > 10 && $number %100 < 14)
    {
        $os = 'th';
    }
    /*** check if number is zero ***/
    elseif($number == 0)
    {
        $os = '';
    }
    else
    {
        /*** get the last digit ***/
        $last = substr($number, -1, 1);

        switch($last)
        {
            case "1":
            $os = 'st';
            break;

            case "2":
            $os = 'nd';
            break;

            case "3":
            $os = 'rd';
            break;

            default:
            $os = 'th';
        }
    }

    /*** add super script ***/
    $os = $ss==0 ? $os : '<sup>'.$os.'</sup>';

    /*** return ***/
    return $number.$os;
}
?> 
13
ответ дан 23 November 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: