fork(4) download
  1. <?php
  2.  
  3.  
  4.  
  5. /* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
  6. function inclineWord($discharge, $key) {
  7.  
  8. $end = array(
  9. 0 => array(
  10. 0 => "миллион",
  11. 1 => "миллиона",
  12. 2 => "миллионов"
  13. ),
  14. 1 => array(
  15. 0 => "тысяча",
  16. 1 => "тысячи",
  17. 2 => "тысяч"
  18. ),
  19. 2 => array(
  20. 0 => "рубль",
  21. 1 => "рубля",
  22. 2 => "рублей"
  23. )
  24. );
  25.  
  26. $word = $discharge % 10;
  27.  
  28. if ($word == 1){
  29. $word = $end[$key][0];
  30. } elseif (($word >= 2) && ($word <= 4)) {
  31. $word = $end[$key][1];
  32. } else {
  33. $word = $end[$key][2];
  34. }
  35.  
  36. return($word);
  37. }
  38.  
  39. //переводит числовое число в текстовое
  40. function smallNumberToText($number) {
  41.  
  42. $spelling = array(
  43. 0 => 'ноль',
  44. 1 => 'один',
  45. 2 => 'два',
  46. 3 => 'три',
  47. 4 => 'четыре',
  48. 5 => 'пять',
  49. 6 => 'шесть',
  50. 7 => 'семь',
  51. 8 => 'восемь',
  52. 9 => 'девять',
  53. 10 => 'десять',
  54. 11 => ' одиннадцать',
  55. 12 => ' двенадцать',
  56. 13 => ' тринадцать',
  57. 14 => ' четырнадцать',
  58. 15 => ' пятнадцать',
  59. 16 => ' шестнадцать',
  60. 17 => ' семнадцать',
  61. 18 => ' восемнадцать',
  62. 19 => ' девятнадцать',
  63. 20 => 'двадцать',
  64. 30 => 'тридцать',
  65. 40 => 'сорок',
  66. 50 => 'пятьдесят',
  67. 60 => 'шестьдесят',
  68. 70 => 'семьдесят',
  69. 80 => 'восемьдесят',
  70. 90 => 'девяносто',
  71. 100 => 'сто',
  72. 200 => 'двести',
  73. 300 => 'триста',
  74. 400 => 'четыреста',
  75. 500 => 'пятьсот',
  76. 600 => 'шестьсот',
  77. 700 => 'семьсот',
  78. 800 => 'восемьсот',
  79. 900 => 'девятьсот',
  80. );
  81.  
  82. $score = mb_strlen($number);
  83.  
  84. $hundred = mb_substr($number, -3);
  85.  
  86. //разбивает число на миллионы, тысяча и сотни
  87. if ($score >= 6) {
  88. $thousand = mb_substr($number, -6, 3);
  89. } elseif ($score == 5) {
  90. $thousand = mb_substr($number, -5, 2);
  91. } elseif ($score == 4) {
  92. $thousand = mb_substr($numver, -4, 1);
  93. }
  94.  
  95. if ($score == 8) {
  96. $million = mb_substr($number, 0, 2);
  97. } elseif ($score == 7) {
  98. $million = mb_substr($number, 1, 1);
  99. }
  100.  
  101. $level = array(
  102. 0 => $million,
  103. 1 => $thousand,
  104. 2 => $hundred
  105. );
  106.  
  107. $number = "";
  108.  
  109. foreach($level as $key => $discharge) {
  110.  
  111. if ($discharge > 0) {
  112.  
  113. if (mb_strlen($discharge) == 3) {
  114. $numberDigits = 1000;
  115. } elseif (mb_strlen($discharge) == 2) {
  116. $numberDigits = 100;
  117. } elseif (mb_strlen($discharge) == 1) {
  118. $numberDigits = 10;
  119. }
  120.  
  121. for ($i = 0; $i < mb_strlen($discharge); $i++) {
  122.  
  123. $numberDigits = $numberDigits / 10;
  124. $words = inclineWord($discharge, $key);
  125. $number = $number.' '.$spelling[mb_substr($discharge, $i, 1) * $numberDigits];
  126. }
  127. $number = $number.' '.$words;
  128. }
  129. }
  130.  
  131. $regexp = array(
  132. 0 => '/ десять один/',
  133. 1 => '/ десять два/',
  134. 2 => '/ десять три/',
  135. 3 => '/ десять четыре/',
  136. 4 => '/ десять пять/',
  137. 5 => '/ десять шесть/',
  138. 6 => '/ десять семь/',
  139. 7 => '/ десять восемь/',
  140. 8 => '/ десять девять/'
  141. );
  142.  
  143. $replacements = array_slice($spelling, 11, 9);
  144. $number = preg_replace($regexp, $replacements, $number);
  145.  
  146. $regexp = '/[ ]ноль[ ]/';
  147. $number = preg_replace($regexp, ' ', $number);
  148.  
  149. $regexp = array ('/один тысяча/', '/два тысячи/');
  150. $replacements = array ('одна тысяча', 'две тысячи');
  151. $number = preg_replace($regexp, $replacements, $number);
  152.  
  153. return($number);
  154. }
  155.  
  156. $number = mt_rand(1, 99999999);
  157. $number = smallNumberToText($number);
  158. echo "На вашем счету {$number}\n";
Success #stdin #stdout 0.03s 52480KB
stdin
Standard input is empty
stdout
На вашем счету  тридцать девять миллионов шестьсот двадцать пять тысяч семьсот шестьдесят восемь рублей