Poniżej przedstawiam kod, który w łatwy, szybki sposób przekształca nam zwykłe liczby na liczby rzymskie czyli np: z 1598 na MDXCVIII.
Thank you for reading this post, don't forget to subscribe!function roman_num($number){ $num = intval($number); $result =""; $roman_numbers = array('M'=>1000, 'CM' =>900, 'D'=>500, 'CD'=>400, 'C'=>100, 'XC' =>90, 'L'=>50, 'XL'=>40, 'X'=>10, 'IX' =>9, 'V'=>5, 'IV'=>4, 'I'=>1); foreach($roman_numbers as $roman=>$value){ $check=intval($num/$value); $result .= str_repeat($roman,$check); $num = $num % $value; } return $result; } echo roman_num(1094);
Kilka słów wyjaśnienia:
Funkcja roman_num
pobiera liczbę w formacie arabskim a wynikiem jej działania jest liczba w formacie rzymskim.
Oczywiście wszystkie liczby, które są przyjmowane przez funkcję najpierw przerabiane są na liczby całkowite (w razie gdyby ktoś chciał przerobić liczbę zmiennoprzecinkową).
$num = intval($number);
Następnie musimy stworzyć tablicę rzymskich liter i ich odpowiedników arabskich:
$roman_numbers = array('M'=>1000, 'CM' =>900, 'D'=>500, 'CD'=>400, 'C'=>100, 'XC' =>90, 'L'=>50, 'XL'=>40, 'X'=>10, 'IX' =>9, 'V'=>5, 'IV'=>4, 'I'=>1);
Później z wykorzystaniem pętli foreach
przeglądamy cała tablicę starając dopasować się do liczb arabskich. Za każdym okrążeniem dzielimy / sprawdzamy reszte i ewentualnie przerabiamy liczbę o największym członie schodząc coraz to niżej do mniejszych wartości. $result .= str_repeat($roman,$check);
dzięki temu zapisowi dokładamy kolejne liczby w ilości zgodnej z wartością $check.
Aby najszybciej zrozumieć działanie programu najlepiej wpisać sobie dodatkową linijkę kodu:
echo $num." - ".$check." - ".$roman." - ".$value."____aktualna liczba:".$result."
";
umieszczając ją zaraz po linijce :$result .= str_repeat($roman,$check);
a przykładowy wynik będzie następujący:
Prawda, że proste ?:)