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