fork download
  1. <?php
  2.  
  3.  
  4.  
  5. $spelling= [0 => 'ноль', 10 => 'десять', 100 => 'сто',
  6. 1 => 'один', 11 => 'одиннадцать', 20 => 'двадцать', 200 => 'двести',
  7. 2 => 'два', 12 => 'двенадцать', 30 => 'тридцать', 300 => 'триста',
  8. 3 => 'три', 13 => 'тринадцать', 40 => 'сорок', 400 => 'четыреста',
  9. 4 => 'четыре', 14 => 'четырнадцать', 50 => 'пятьдесят', 500 => 'пятьсот',
  10. 5 => 'пять', 15 => 'пятнадцать', 60 => 'шестьдесят', 600 => 'шестьсот',
  11. 6 => 'шесть', 16 => 'шестнадцать', 70 => 'семьдесят', 700 => 'семьсот',
  12. 7 => 'семь', 17 => 'семнадцать', 80 => 'восемьдесят', 800 => 'восемьсот',
  13. 8 => 'восемь', 18 => 'восемнадцать', 90 => 'девяносто', 900 => 'девятьсот',
  14. 9 => 'девять', 19 => 'девятнадцать' ];
  15. $spellingForFemaleGenus= [1=>'одна', 2=>'две'];
  16.  
  17. function n_to_groups($n)
  18. {
  19. $partsArray = [];
  20. for ($i = $n; $i > 0;) {
  21. $part = $i % 1000;
  22. $partsArray[] = $part;
  23. $i = floor($i / 1000);
  24. }
  25. return $partsArray;
  26. }
  27.  
  28. function small_number_to_text ($n, $gen){
  29. global $spelling;
  30. global $spellingForFemaleGenus;
  31. $i=floor($n/100);
  32. if ($i!=0) {
  33. $i = $i*100;
  34. $iSpelling = $spelling[$i];
  35. }
  36. else {
  37. $iSpelling = null;
  38. }
  39. if (($n%100)>19) {
  40. $j = 10 * (floor(( $n%100) / 10));
  41. $jSpelling = $spelling[$j];
  42. }
  43. elseif (($n%100)<20 and ($n%100)>=10){
  44. $j = $n % 100;
  45. $jSpelling = $spelling[$j];
  46. }
  47. elseif (($n%100)<10){
  48. $jSpelling=null;
  49. }
  50. if ($n%100>=10 and $n%100<=19){
  51. $k=null;
  52. }
  53. else {
  54. $k = $n % 10;
  55. }
  56. if ($k>0){
  57. $kSpelling=$spelling[$k];
  58. }
  59. if (($k==1 and $gen==1) or ($k==2 and $gen==1)){
  60. $kSpelling=$spellingForFemaleGenus[$k];
  61. }
  62. elseif ($k==0){
  63. $kSpelling=null;
  64. }
  65. $smallNInText='';
  66. if ($iSpelling){
  67. $smallNInText=$smallNInText . $iSpelling . ' ';
  68. }
  69. if ($jSpelling){
  70. $smallNInText=$smallNInText . $jSpelling . ' ';
  71. }
  72. if ($kSpelling){
  73. $smallNInText=$smallNInText . $kSpelling . ' ';
  74. }
  75. return $smallNInText;
  76. }
  77.  
  78. function word_form ($n,$form1,$form2,$form3){
  79. $i=$n%10;
  80. $j=$n%100;
  81. if ($n = false) {
  82. $wordForm = null;
  83. } elseif ($i == 1) {
  84. $wordForm = $form1;
  85. } elseif ($i >= 2 and $i <= 4) {
  86. $wordForm = $form2;
  87. } elseif ($i == 0 or $i >= 5) {
  88. $wordForm = $form3;
  89. }
  90. if ($j>=10 and $j<=20) {
  91. $wordForm = $form3;
  92. }
  93. return $wordForm;
  94. }
  95.  
  96. function number_to_text ($n){
  97. $partsArray= n_to_groups ($n);
  98. if ($partsArray[2]) {
  99. $millionsToText = small_number_to_text($partsArray[2], 0) . word_form($partsArray[2], "миллион", "миллиона", "миллионов");
  100. }
  101. elseif ($partsArray[2]=false){
  102. $millionsToText=null;
  103. }
  104.  
  105. if ($partsArray[1]) {
  106. $thousandToText= small_number_to_text($partsArray[1], 1) . word_form($partsArray[1], "тысяча","тысячи", "тысяч");
  107. }
  108. elseif ($partsArray[1]=false){
  109. $thousandToText=null;
  110. }
  111. if ($partsArray[0]) {
  112. $roublesToText= small_number_to_text($partsArray[0], 0) . word_form($partsArray[0], "рубль", "рубля", "рублей");
  113. }
  114. elseif ($partsArray[0]=false) {
  115. $roublesToText= word_form(0, "рубль", "рубля", "рублей");
  116. }
  117. elseif ($partsArray[0]==0) {
  118. $roublesToText= "ноль рублей";
  119. }
  120. $numberToText= '';
  121. if ($millionsToText){
  122. $numberToText=$numberToText . ' ' . $millionsToText;
  123. }
  124. if ($thousandToText){
  125. $numberToText=$numberToText . ' ' . $thousandToText;
  126. }
  127. if ($roublesToText){
  128. $numberToText=$numberToText . ' ' . $roublesToText;
  129. }
  130. return $numberToText;
  131. }
  132.  
  133. $test1= number_to_text(mt_rand(0,999999999));
  134. echo "На Вашем счету$test1\n";
  135. $test2= number_to_text(mt_rand(0,999999999));
  136. echo "На Вашем счету$test2\n";
  137. $test3= number_to_text(mt_rand(0,999999999));
  138. echo "На Вашем счету$test3\n";
Success #stdin #stdout 0.02s 24648KB
stdin
Standard input is empty
stdout
На Вашем счету триста двадцать четыре миллиона восемьсот шестнадцать тысяч восемьсот тридцать рублей
На Вашем счету пятьсот шестьдесят один миллион пятьдесят три тысячи девятьсот восемьдесят шесть рублей
На Вашем счету семьдесят три миллиона девятьсот семьдесят две тысячи триста тридцать четыре рубля