Арабские цифры - в Римские

mychatik

Support
Команда форума
Регистрация
26.05.15
Сообщения
526
Реакции
458
Баллы
63
Для оформления своего проекта может понадобиться вывод информации (например, года) римскими цифрами.
BNG8N.png

Конечно, можно каждый год переписывать дату вручную, но зачем, если можно применить небольшую функцию.
Время обработки - 0.0223 | 4 484 305 шт/сек | CMXCIX
Автор функции Chushkin

По данным Википедии, некоторые из цифр (I, X, C, M) могут повторяться, но не более трёх раз подряд.
Таким образом, с их помощью можно записать любое целое число не более 3999 (MMMCMXCIX).
Если число больше 3999 - выводится ***.

Для PHP7.0
PHP:
function int2roman($n, $prefix='***') {
    $M = ['','M','MM','MMM'];
    $C = ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM'];
    $X = ['','X','XX','XXX','XL','L','LX','LXX','LXXX','XC'];
    $I = ['','I','II','III','IV','V','VI','VII','VIII','IX'];
    return ($n > 3999 ? $prefix : '') . ($M[($n % 10000)/1000] ?? '') . $C[($n % 1000)/100] . $X[($n % 100)/10] . $I[($n % 10)];
}

Для PHP5.3
PHP:
function int2roman($n, $prefix='***') {
    $M = ['','M','MM','MMM'];
    $C = ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM'];
    $X = ['','X','XX','XXX','XL','L','LX','LXX','LXXX','XC'];
    $I = ['','I','II','III','IV','V','VI','VII','VIII','IX'];
    return ($n > 3999 ? $prefix : '') . ($M[($n % 10000)/1000] ?: '') . $C[($n % 1000)/100] . $X[($n % 100)/10] . $I[($n % 10)];
}
Разница между версиями - только в краткой записи тернарного оператора ?? или ?:
Если не поддерживается краткая запись массивов, можно переписать в стандартном виде: $array = array(1, 2, 3, 4, 5);

Применение:
PHP:
int2roman($years)
 
Сверху Снизу