3v4l.org

run code in 300+ PHP versions simultaneously
<?php /* |----------------------------------------------------------------------------------------------------------------------- | Negative roman numbers?! :D - No apparent concept of negatives here. | So we could just stick to normal negative numbers. |----------------------------------------------------------------------------------------------------------------------- */ # normal negative numbers $roman = '-x: =#,##0=;'; # "Just for fun/Unofficial" negative roman numerals #$roman = '-x: ->>;'; /* |----------------------------------------------------------------------------------------------------------------------- | No concept of zero here. | The number zero does not have its own Roman numeral, but the word nulla (the Latin word meaning "none") | was used by medieval scholars in lieu of 0. Dionysius Exiguus was known to use nulla alongside Roman numerals | in 525. | | 0: nulla | 0: N | The N could also be used. https://en.wikipedia.org/wiki/Roman_numerals#Zero |----------------------------------------------------------------------------------------------------------------------- */ # $roman = '0: N;'; $roman .= '0: nulla;'; /* |----------------------------------------------------------------------------------------------------------------------- | The larger numbers |----------------------------------------------------------------------------------------------------------------------- */ $roman .= <<<RULE_BASED_FORMAT I; II; III; IV; V; VI; VII; VIII; IX; 10: X>>; 20: XX>>; 30: XXX>>; 40: XL>>; 50: L>>; 60: LX>>; 70: LXX>>; 80: LXXX>>; 90: XC>>; 100: C>>; 400: CD>>; 500: D>>; 600: DC>>; 900: CM>>; 1000: M>>; 2000: MM>>; 3000: MMM>>; 4000: MMMM>>; RULE_BASED_FORMAT; /* |----------------------------------------------------------------------------------------------------------------------- | The larger numbers |----------------------------------------------------------------------------------------------------------------------- */ $roman .= <<<RULE_BASED_FORMAT 5000: V\u{0305}>>; 6000: V\u{0305}M>>; 7000: V\u{0305}MM>>; 8000: V\u{0305}MMM>>; 9000: V\u{0305}MMMM>>; 10000: X\u{0305}>>; 20000: X\u{0305}X\u{0305}>>; 30000: X\u{0305}X\u{0305}X\u{0305}>>; 40000: X\u{0305}L\u{0305}>>; 50000: L\u{0305}>>; 60000: L\u{0305}X\u{0305}>>; 70000: L\u{0305}X\u{0305}X\u{0305}>>; 80000: L\u{0305}X\u{0305}X\u{0305}X\u{0305}>>; 90000: X\u{0305}C\u{0305}>>; 100000: C\u{0305}>>; 200000: C\u{0305}C\u{0305}>>; 300000: C\u{0305}C\u{0305}C\u{0305}>>; 400000: C\u{0305}D\u{0305}>>; 500000: D\u{0305}>>; 600000: D\u{0305}C\u{0305}>>; 700000: D\u{0305}C\u{0305}C\u{0305}>>; 800000: D\u{0305}C\u{0305}C\u{0305}C\u{0305}>>; 900000: C\u{0305}M\u{0305}>>; 1000000: M\u{0305}>>; 2000000: M\u{0305}M\u{0305}>>; 3000000: M\u{0305}M\u{0305}M\u{0305}>>; 4000000: I\u{033F}V\u{033F}>>; 5000000: V\u{033F}>>; 6000000: V\u{033F}I\u{033F}>>; 7000000: V\u{033F}I\u{033F}I\u{033F}>>; 8000000: V\u{033F}I\u{033F}I\u{033F}I\u{033F}>>; 9000000: I\u{033F}X\u{033F}>>; 10000000: X\u{033F}>>; 20000000: X\u{033F}X\u{033F}>>; 30000000: X\u{033F}X\u{033F}X\u{033F}>>; 40000000: X\u{033F}L\u{033F}>>; 50000000: L\u{033F}>>; 60000000: L\u{033F}X\u{033F}>>; 70000000: L\u{033F}X\u{033F}X\u{033F}>>; 80000000: L\u{033F}X\u{033F}X\u{033F}X\u{033F}>>; 90000000: X\u{033F}C\u{033F}>>; 100000000: C\u{033F}>>; 200000000: C\u{033F}C\u{033F}>>; 300000000: C\u{033F}C\u{033F}C\u{033F}>>; 400000000: C\u{033F}D\u{033F}>>; 500000000: D\u{033F}>>; 600000000: D\u{033F}C\u{033F}>>; 700000000: D\u{033F}C\u{033F}C\u{033F}>>; 800000000: D\u{033F}C\u{033F}C\u{033F}C\u{033F}>>; 900000000: C\u{033F}M\u{033F}>>; 1000000000: M\u{033F}>>; 2000000000: M\u{033F}M\u{033F}>>; 3000000000: M\u{033F}M\u{033F}M\u{033F}>>; 4000000000: M\u{033F};M\u{033F};M\u{033F};M\u{033F}>>; RULE_BASED_FORMAT; /* |----------------------------------------------------------------------------------------------------------------------- | Then go back to normal numbers |----------------------------------------------------------------------------------------------------------------------- */ $roman .= <<<RULE_BASED_FORMAT 5000000000: =#,##0=; RULE_BASED_FORMAT; header('Content-Type: text/html; charset=utf-8'); $fmt = new NumberFormatter('en', NumberFormatter::PATTERN_RULEBASED, $roman); $year = $fmt->format(2014); $game = $fmt->format(22); echo "Year $year, $game Olympic Winter Games"; /* |----------------------------------------------------------------------------------------------------------------------- | Sources: | https://en.wikipedia.org/wiki/Roman_numerals | http://www.tuomas.salste.net/doc/roman/numeri-romani-learn.html | https://en.wikipedia.org/wiki/1,000,000,000 | https://forbrains.co.uk/free_online_tools/convert_to_roman_numerals | https://en.wikipedia.org/wiki/Numerals_in_Unicode#Roman_numerals_in_Unicode | http://userguide.icu-project.org/formatparse/numbers/rbnf-examples | | Warning, there are more than one ways to write certain numbers, and some | can even mean two different numbers. | | Example: "V̅I̅I̅I̅" can mean 80,000 or 800,000 | See https://en.wikipedia.org/wiki/Roman_numerals#Vinculum |----------------------------------------------------------------------------------------------------------------------- */
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/mKXqg
function name:  (null)
number of ops:  30
compiled vars:  !0 = $roman, !1 = $fmt, !2 = $year, !3 = $game
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    9     0  E >   ASSIGN                                                   !0, '-x%3A+%3D%23%2C%23%230%3D%3B'
   27     1        ASSIGN_OP                                     8          !0, '0%3A+nulla%3B'
   35     2        ASSIGN_OP                                     8          !0, 'I%3B+II%3B+III%3B+IV%3B+V%3B+VI%3B+VII%3B+VIII%3B+IX%3B%0A10%3A+X%3E%3E%3B%0A20%3A+XX%3E%3E%3B%0A30%3A+XXX%3E%3E%3B%0A40%3A+XL%3E%3E%3B%0A50%3A+L%3E%3E%3B%0A60%3A+LX%3E%3E%3B%0A70%3A+LXX%3E%3E%3B%0A80%3A+LXXX%3E%3E%3B%0A90%3A+XC%3E%3E%3B%0A100%3A+C%3E%3E%3B%0A400%3A+CD%3E%3E%3B%0A500%3A+D%3E%3E%3B%0A600%3A+DC%3E%3E%3B%0A900%3A+CM%3E%3E%3B%0A1000%3A+M%3E%3E%3B%0A2000%3A+MM%3E%3E%3B%0A3000%3A+MMM%3E%3E%3B%0A4000%3A+MMMM%3E%3E%3B'
   62     3        ASSIGN_OP                                     8          !0, '5000%3A+V%CC%85%3E%3E%3B%0A6000%3A+V%CC%85M%3E%3E%3B%0A7000%3A+V%CC%85MM%3E%3E%3B%0A8000%3A+V%CC%85MMM%3E%3E%3B%0A9000%3A+V%CC%85MMMM%3E%3E%3B%0A10000%3A+X%CC%85%3E%3E%3B%0A20000%3A+X%CC%85X%CC%85%3E%3E%3B%0A30000%3A+X%CC%85X%CC%85X%CC%85%3E%3E%3B%0A40000%3A+X%CC%85L%CC%85%3E%3E%3B%0A50000%3A+L%CC%85%3E%3E%3B%0A60000%3A+L%CC%85X%CC%85%3E%3E%3B%0A70000%3A+L%CC%85X%CC%85X%CC%85%3E%3E%3B%0A80000%3A+L%CC%85X%CC%85X%CC%85X%CC%85%3E%3E%3B%0A90000%3A+X%CC%85C%CC%85%3E%3E%3B%0A100000%3A+C%CC%85%3E%3E%3B%0A200000%3A+C%CC%85C%CC%85%3E%3E%3B%0A300000%3A+C%CC%85C%CC%85C%CC%85%3E%3E%3B%0A400000%3A+C%CC%85D%CC%85%3E%3E%3B%0A500000%3A+D%CC%85%3E%3E%3B%0A600000%3A+D%CC%85C%CC%85%3E%3E%3B%0A700000%3A+D%CC%85C%CC%85C%CC%85%3E%3E%3B%0A800000%3A+D%CC%85C%CC%85C%CC%85C%CC%85%3E%3E%3B%0A900000%3A+C%CC%85M%CC%85%3E%3E%3B%0A1000000%3A+M%CC%85%3E%3E%3B%0A2000000%3A+M%CC%85M%CC%85%3E%3E%3B%0A3000000%3A+M%CC%85M%CC%85M%CC%85%3E%3E%3B%0A4000000%3A+I%CC%BFV%CC%BF%3E%3E%3B%0A5000000%3A+V%CC%BF%3E%3E%3B%0A6000000%3A+V%CC%BFI%CC%BF%3E%3E%3B%0A7000000%3A+V%CC%BFI%CC%BFI%CC%BF%3E%3E%3B%0A8000000%3A+V%CC%BFI%CC%BFI%CC%BFI%CC%BF%3E%3E%3B%0A9000000%3A+I%CC%BFX%CC%BF%3E%3E%3B%0A10000000%3A+X%CC%BF%3E%3E%3B%0A20000000%3A+X%CC%BFX%CC%BF%3E%3E%3B%0A30000000%3A+X%CC%BFX%CC%BFX%CC%BF%3E%3E%3B%0A40000000%3A+X%CC%BFL%CC%BF%3E%3E%3B%0A50000000%3A+L%CC%BF%3E%3E%3B%0A60000000%3A+L%CC%BFX%CC%BF%3E%3E%3B%0A70000000%3A+L%CC%BFX%CC%BFX%CC%BF%3E%3E%3B%0A80000000%3A+L%CC%BFX%CC%BFX%CC%BFX%CC%BF%3E%3E%3B%0A90000000%3A+X%CC%BFC%CC%BF%3E%3E%3B%0A100000000%3A+C%CC%BF%3E%3E%3B%0A200000000%3A+C%CC%BFC%CC%BF%3E%3E%3B%0A300000000%3A+C%CC%BFC%CC%BFC%CC%BF%3E%3E%3B%0A400000000%3A+C%CC%BFD%CC%BF%3E%3E%3B%0A500000000%3A+D%CC%BF%3E%3E%3B%0A600000000%3A+D%CC%BFC%CC%BF%3E%3E%3B%0A700000000%3A+D%CC%BFC%CC%BFC%CC%BF%3E%3E%3B%0A800000000%3A+D%CC%BFC%CC%BFC%CC%BFC%CC%BF%3E%3E%3B%0A900000000%3A+C%CC%BFM%CC%BF%3E%3E%3B%0A1000000000%3A+M%CC%BF%3E%3E%3B%0A2000000000%3A+M%CC%BFM%CC%BF%3E%3E%3B%0A3000000000%3A+M%CC%BFM%CC%BFM%CC%BF%3E%3E%3B%0A4000000000%3A+M%CC%BF%3BM%CC%BF%3BM%CC%BF%3BM%CC%BF%3E%3E%3B'
  124     4        ASSIGN_OP                                     8          !0, '5000000000%3A+%3D%23%2C%23%230%3D%3B'
  127     5        INIT_FCALL                                               'header'
          6        SEND_VAL                                                 'Content-Type%3A+text%2Fhtml%3B+charset%3Dutf-8'
          7        DO_ICALL                                                 
  130     8        NEW                                              $10     'NumberFormatter'
          9        SEND_VAL_EX                                              'en'
         10        FETCH_CLASS_CONSTANT                             ~11     'NumberFormatter', 'PATTERN_RULEBASED'
         11        SEND_VAL_EX                                              ~11
         12        SEND_VAR_EX                                              !0
         13        DO_FCALL                                      0          
         14        ASSIGN                                                   !1, $10
  131    15        INIT_METHOD_CALL                                         !1, 'format'
         16        SEND_VAL_EX                                              2014
         17        DO_FCALL                                      0  $14     
         18        ASSIGN                                                   !2, $14
  132    19        INIT_METHOD_CALL                                         !1, 'format'
         20        SEND_VAL_EX                                              22
         21        DO_FCALL                                      0  $16     
         22        ASSIGN                                                   !3, $16
  133    23        ROPE_INIT                                     5  ~19     'Year+'
         24        ROPE_ADD                                      1  ~19     ~19, !2
         25        ROPE_ADD                                      2  ~19     ~19, '%2C+'
         26        ROPE_ADD                                      3  ~19     ~19, !3
         27        ROPE_END                                      4  ~18     ~19, '+Olympic+Winter+Games'
         28        ECHO                                                     ~18
  152    29      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
170.43 ms | 1404 KiB | 16 Q