sohotcall

PHP Terbilang (Nonrekursif) dan Roman

Jan 6th, 2021
1,022
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. //PHP Terbilang (Nonrekursif) dan Roman
  3. static function terbilang( $x, $mode = 2, $cent = 0 ){
  4.     $x = number_format( $x, $cent, ".", "," );
  5.     list( $x, $y ) = explode( ".", $x . "." );
  6.     $satuan = array( "Nol", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan", "Sembilan" );
  7.     $ribuan = array( 1 => "Ribu", "Juta", "Miliar", "Triliun" );
  8.     foreach ( array_reverse( explode( ",", $x ) ) as $k => $v ){
  9.         if ( $v == 0 ){
  10.             if ( $x == 0 )
  11.                 $result[$k] = "Nol";
  12.         } elseif ( $k * $v == 1 ){
  13.             $result[$k] = "Seribu ";
  14.         } elseif ( $v ){
  15.             $tigaan = str_split( substr( 1000 + $v, -3 ) );
  16.             if ( $tigaan[0] == 1 )
  17.                 $result[$k] = "Seratus ";
  18.             elseif ( $tigaan[0] )
  19.                 $result[$k] = $satuan[$tigaan[0]] . " Ratus ";
  20.             if ( $tigaan[1] == 1 && $tigaan[2] == 0 )
  21.                 $result[$k] .= "Sepuluh ";
  22.             elseif ( $tigaan[1] == 1 && $tigaan[2] == 1 )
  23.                 $result[$k] .= "Sebelas ";
  24.             elseif ( $tigaan[1] == 1 )
  25.                 $result[$k] .= $satuan[$tigaan[2]] . " Belas ";
  26.             else {
  27.                 if ( $tigaan[1] )
  28.                     $result[$k] .= $satuan[$tigaan[1]] . " Puluh ";
  29.                 if ( $tigaan[2] )
  30.                     $result[$k] .= $satuan[$tigaan[2]] . " ";
  31.             }
  32.             if ( $k )
  33.                 $result[$k] .= $ribuan[ $k ] . " ";
  34.         }
  35.     }
  36.     $title = trim( implode( array_reverse( $result ) ) );
  37.     if ( 1 * $y ){
  38.         $title .= " Koma " . $satuan[$y[0]] . " " . $satuan[$y[1]];
  39.     }
  40.     if ( $mode == 0 )
  41.         return strtolower( $title );
  42.     elseif ( $mode == 1 )
  43.         return ucfirst( strtolower( $title ) );
  44.     elseif ( $mode == 2 )
  45.         return ucwords( $title );
  46.     elseif ( $mode == 3 )
  47.         return strtoupper( $title );
  48. }
  49.  
  50. static function roman($x){
  51.     $romans = array( 1000 => 'M', 900 => 'CM', 500 => 'D', 400 => 'CD',
  52.         100 => 'C', 90 => 'XC', 50 => 'L', 40 => 'XL', 10 => 'X',
  53.         9 => 'IX', 5 => 'V', 4 => 'IV', 1 => 'I' );
  54.     $out = "";
  55.     foreach ( $romans as $k=>$v )
  56.         while ( $k <= $x ){
  57.             $out .= $v;
  58.             $x -= $k;
  59.         }
  60.     return $out;
  61. }
  62.  
RAW Paste Data