fork download
  1. <?php
  2.  
  3.  
  4.  
  5.  
  6. /* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
  7. function toChooseFormOfRouble($number) {
  8. $lenghtOfNumber = (int) floor(log10($number)+1);
  9. $lastTwoDigits = $number % 100;
  10. $lastOneDigit = $number % 10;
  11. //$thousand = ["тысячи","тысяч"];
  12. //$millions = ["миллион","миллионов","миллиона"];
  13. $roubles = ["рубль","рубля","рублей"];
  14.  
  15. if ($lastOneDigit == 1 && $lastTwoDigits != 11 && $lastTwoDigits != 1 || $number == 1){
  16. return $roubles[0];
  17. }elseif ($lastOneDigit > 1 && $lastOneDigit < 5 ){
  18. return $roubles[1];
  19. }
  20.  
  21. for ($i = 1, $x = 0; $i < 10; $i++) {
  22. $thirdFormOfRouble = "$i$x";
  23. if ($lastOneDigit > 4 && $lastOneDigit < 10 || $lastTwoDigits == 10 || $lastTwoDigits == $thirdFormOfRouble) {
  24. return $roubles[2];
  25. }
  26. }
  27.  
  28.  
  29. }
  30.  
  31. function toChooseFormOfThousands($number) {
  32. }
  33. /*
  34.   Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю,
  35.   если мы считаем число для мужского рода (один рубль),
  36.   и 1 — для женского (одна тысяча)
  37. */
  38.  
  39. function smallNumberToText($number) {
  40.  
  41. $spelling = array(
  42. 0 => 'ноль', 10 => 'десять', 100 => 'сто',
  43. 1 => 'один', 11 => 'одиннадцать', 20 => 'двадцать', 200 => 'двести',
  44. 2 => 'два', 12 => 'двенадцать', 30 => 'тридцать', 300 => 'триста',
  45. 3 => 'три', 13 => 'тринадцать', 40 => 'сорок', 400 => 'четыреста',
  46. 4 => 'четыре', 14 => 'четырнадцать', 50 => 'пятьдесят', 500 => 'пятьсот',
  47. 5 => 'пять', 15 => 'пятнадцать', 60 => 'шестьдесят', 600 => 'шестьсот',
  48. 6 => 'шесть', 16 => 'шестнадцать', 70 => 'семьдесят', 700 => 'семьсот',
  49. 7 => 'семь', 17 => 'семнадцать', 80 => 'восемьдесят', 800 => 'восемьсот',
  50. 8 => 'восемь', 18 => 'восемнадцать', 90 => 'девяносто', 900 => 'девятьсот',
  51. 9 => 'девять', 19 => 'девятнадцать'
  52. );
  53.  
  54.  
  55. $resultExp= [];
  56.  
  57. $hundreds = intval(floor($number / 100) * 100);
  58. //var_dump($hundreds);
  59. $tensAndUnits = $number % 100;
  60. //var_dump($tensAndUnits);
  61. $units = $tensAndUnits % 10;
  62. // var_dump($units);
  63. if ($hundreds >= 100) {
  64. $resultExp[]= $spelling[$hundreds];
  65. }
  66. if ($tensAndUnits >= 1 && $tensAndUnits <= 19) {
  67. $resultExp[] = $spelling[$tensAndUnits];
  68. }else {
  69. $tensAndUnits = intval(floor($tensAndUnits / 10)) * 10;
  70. $resultExp[] = $spelling[$tensAndUnits];
  71. if ($units > 0){
  72. $resultExp[] = $spelling[$units];
  73. }
  74.  
  75. }
  76.  
  77. return implode(" ",$resultExp);
  78. }
  79.  
  80. function numberToText($number) {
  81.  
  82. $lenghtOfNumber = (int) floor(log10($number)+1);
  83. $formated = number_format($number);
  84.  
  85. if ($lenghtOfNumber <= 3) {
  86. $toWords = smallNumberToText($number);
  87. $goodForm = toChooseFormOfRouble($number);
  88. $final = "$toWords $goodForm";
  89. return $final;
  90. }elseif ($lenghtOfNumber == 4||$lenghtOfNumber == 5|| $lenghtOfNumber == 6) {
  91.  
  92. }
  93.  
  94.  
  95. }
  96. $random = mt_rand(100,999);
  97. $meow = numberToText($random);
  98. echo $meow;
  99.  
  100. ?>
  101.  
Success #stdin #stdout 0.02s 24484KB
stdin
Standard input is empty
stdout
триста сорок четыре рубля