Отображать номер как порядковый номер в «форме слова» с PHP-классом NumberFormatter?

Если бы я хотел отобразить данное число как порядковый номер, я бы сделал это так:

<?php
    // Needs 'php5-intl' package to be installed on Debian/Ubuntu

    $set_format = numfmt_create( 'en_US', NumberFormatter::ORDINAL );

    // '3' is displayed as '3rd'
    echo numfmt_format( $set_format, 3 );

?>

Но если я хочу отобразить данное число как порядковый номер в словесной форме (например, первый, второй, третий и т. д.), используя встроенную функцию/класс PHP как NumberFormatter, как мне это сделать? Является ли это возможным?

Ссылки по теме:


person its_me    schedule 16.10.2013    source источник


Ответы (1)


Вы хотите использовать стиль формата SPELLOUT, а не ORDINAL.

Следующая проблема заключается в том, как указать программе форматирования использовать конкретный набор правил, который вас интересует; а именно %spellout-ordinal. Это можно сделать с помощью setTextAttribute().

Пример

$formatter = new NumberFormatter('en_US', NumberFormatter::SPELLOUT);
$formatter->setTextAttribute(NumberFormatter::DEFAULT_RULESET,
                             "%spellout-ordinal");

for ($i = 1; $i <= 5; $i++) {
    echo $formatter->format($i) . PHP_EOL;
}

Вывод

first
second
third
fourth
fifth
person salathe    schedule 16.10.2013
comment
Если я не ошибаюсь, есть небольшая ошибка. Было бы echo $formatter->format($i) . PHP_EOL;. Я прав? - person its_me; 16.10.2013
comment
Абсолютно. В письме я сократил имя переменной (чтобы вторая строка поместилась на узкой странице SO), затем подумал лучше и обернул строку... оставив этот артефакт опечатки. - person salathe; 16.10.2013
comment
P.S. SO ответы - это вики. Не стесняйтесь исправлять опечатки, если/когда вы их заметите. - person salathe; 16.10.2013
comment
Последняя вещь. Вы знаете, как я могу сделать первую букву заглавной (первая, вторая, третья...)? Я имею в виду, нужно ли мне использовать что-то вроде ucfirst() или есть встроенный способ? - person its_me; 16.10.2013
comment
ucfirst() подойдет, я полагаю. - person salathe; 17.10.2013
comment
Поддерживает ли это неанглийские языки? Я пробую арабский, но все равно возвращаю обычный SPELLOUT - person shamaseen; 31.05.2021