Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 30th, 2012  |  syntax: PHP  |  size: 4.52 KB  |  hits: 26  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1.         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2.         //
  3.         //  Число в строку
  4.         //
  5.         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  6.  
  7.         static public function numberInWords( $_number, $_gender = 'masculine' )
  8.         {
  9.                 // Всякие константы
  10.  
  11.                 $triadsInfo = array
  12.                 (
  13.                         1 => array
  14.                         (
  15.                                 'gender'        => 'feminine',
  16.                                 'forms'         => array('тысяча', 'тысячи', 'тысяч')
  17.                         ),
  18.  
  19.                         2 => array
  20.                         (
  21.                                 'gender'        => 'masculine',
  22.                                 'forms'         => array('миллион', 'миллиона', 'миллионов')
  23.                         ),
  24.  
  25.                         3 => array
  26.                         (
  27.                                 'gender'        => 'masculine',
  28.                                 'forms'         => array('миллиард', 'миллиарда', 'миллиардов')
  29.                         ),
  30.  
  31.                         4 => array
  32.                         (
  33.                                 'gender'        => 'masculine',
  34.                                 'forms'         => array('триллион', 'триллиона', 'триллионов')
  35.                         )
  36.                 );
  37.  
  38.                 $stringsX = array
  39.                 (
  40.                         'masculine'     => array('', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'),
  41.                         'neuter'        => array('', 'одно', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'),
  42.                         'feminine'      => array('', 'одна', 'две', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять')
  43.                 );
  44.  
  45.                 $stringsX0              = array('', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
  46.                 $stringsX00             = array('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
  47.                 $strings10to19  = array(10 => 'десять', 11 => 'одиннадцать', 12 => 'двенадцать', 13 => 'тринадцать', 14 => 'четырнадцать', 15 => 'пятнадцать', 16 => 'шестнадцать', 17 => 'семнадцать', 18 => 'восемнадцать', 19 => 'девятнадцать');
  48.  
  49.                 // Поехали
  50.  
  51.                 $result = '';
  52.  
  53.                 if ( $_number == 0 )
  54.                 {
  55.                         return 'ноль';
  56.                 }
  57.  
  58.                 if ( $_number < 0 )
  59.                 {
  60.                         $result[] = 'минус ';
  61.                         $_number = abs($_number);
  62.                 }
  63.  
  64.                 // Бьём на триады
  65.  
  66.                 $triads = array();
  67.  
  68.                 $string = strrev($_number);
  69.  
  70.                 $i = 0;
  71.                 while ( true )
  72.                 {
  73.                         $value = substr($string, 3 * $i, 3);
  74.  
  75.                         if ( $value == '' )
  76.                         {
  77.                                 break;
  78.                         }
  79.  
  80.                         else
  81.                         {
  82.                                 $triads[] = $value;
  83.                         }
  84.  
  85.                         $i++;
  86.                 }
  87.  
  88.                 // Озвучиваем их
  89.  
  90.                 for ( $i = count($triads) - 1; $i >= 0; $i-- )
  91.                 {
  92.                         if ( $result != '' )
  93.                         {
  94.                                 $result .= ' ';
  95.                         }
  96.  
  97.                         $triad = $triads[$i];
  98.  
  99.                         if ( strlen($triad) == 3 )
  100.                         {
  101.                                 $result .= $stringsX00[$triad[2]];
  102.                         }
  103.  
  104.                         if ( strlen($triad) > 1 )
  105.                         {
  106.                                 if ( $value[1] == 1 )
  107.                                 {
  108.                                         $result .= ' ' . $strings10to19[$triad[1] . $triad[0]];
  109.                                         continue;
  110.                                 }
  111.  
  112.                                 if ( $triad[1] > 0 )
  113.                                 {
  114.                                         $result .= ' ' . $stringsX0[$triad[1]];
  115.                                 }
  116.                         }
  117.  
  118.                         if ( $triad[0] != 0 )
  119.                         {
  120.                                 $gender = $i > 0 ? $triadsInfo[$i]['gender'] : $_gender;
  121.                                 $result .= ' ' . $stringsX[$gender][$triad[0]];
  122.                         }
  123.  
  124.                         if ( $i > 0 )
  125.                         {
  126.                                 $result .= ' ' . \Project\Helpers\Text::getCorrectPluralForm
  127.                                 (
  128.                                         strrev($triad),
  129.                                         $triadsInfo[$i]['forms'][0],
  130.                                         $triadsInfo[$i]['forms'][1],
  131.                                         $triadsInfo[$i]['forms'][2]
  132.                                 );
  133.                         }
  134.                 }
  135.  
  136.                 return $result;
  137.         }
  138.  
  139.         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  140.         //
  141.         //  Бабло в строку
  142.         //
  143.         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  144.  
  145.         static public function moneyInWords( $_integerPart, $_fractionalPart = null )
  146.         {
  147.                 $result =
  148.                 self::numberInWords($_integerPart) . ' ' .
  149.                 \Project\Helpers\Text::getCorrectPluralForm($_integerPart, 'рубль', 'рубля', 'рублей');
  150.  
  151.                 if ( $_fractionalPart !== null )
  152.                 {
  153.                         $result .=
  154.                         ' ' .
  155.                         self::numberInWords($_fractionalPart) . ' ' .
  156.                         \Project\Helpers\Text::getCorrectPluralForm($_fractionalPart, 'копейка', 'копейки', 'копеек');
  157.                 }
  158.  
  159.                 return $result;
  160.         }