fork download
  1. <?php
  2. function returnText($number){
  3. $numText = '';
  4. $declinateArray = array();
  5.  
  6. $firstNumGroup = floor($number/1000000); // Бьем на миллионы
  7.  
  8. $declinateArray[0]['number'] = $firstNumGroup;
  9. $declinateArray[0]['letter1'] = 'миллион';
  10. $declinateArray[0]['letter2'] = 'миллиона';
  11. $declinateArray[0]['letter3'] = 'миллионов';
  12. $declinateArray[0]['isFemale'] = 0;
  13.  
  14. $secondNumGroup = floor(($number%1000000)/1000); // Бьем на тысячи
  15.  
  16. $declinateArray[1]['number'] = $secondNumGroup;
  17. $declinateArray[1]['letter1'] = 'тысяча';
  18. $declinateArray[1]['letter2'] = 'тысячи';
  19. $declinateArray[1]['letter3'] = 'тысяч';
  20. $declinateArray[1]['isFemale'] = 1;
  21.  
  22. $thirdNumGroup = $number%1000; // Бьем на сотни
  23.  
  24. $declinateArray[2]['number'] = $thirdNumGroup;
  25. $declinateArray[2]['letter1'] = 'рубль';
  26. $declinateArray[2]['letter2'] = 'рубля';
  27. $declinateArray[2]['letter3'] = 'рублей';
  28. $declinateArray[2]['isFemale'] = 0;
  29.  
  30. function declinateNumbers($number, $letter1, $letter2, $letter3){ //Прием цифры и 3 склонений слова
  31.  
  32. if($number == 0){
  33. return;
  34. }
  35.  
  36. $declinationNum = $number%10;
  37. if($declinationNum == 1){
  38. return $letter1;
  39. }elseif($declinationNum == 2 || $declinationNum == 3 || $declinationNum == 4){
  40. return $letter2;
  41. }else{
  42. return $letter3;
  43. }
  44. }
  45. // $isFemale равен 0 когда слово мужского (миллион) рода и 1 когда женского (тысяча)
  46. function getSmallNumber($number, $isFemale){
  47.  
  48. if($number == 0){
  49. return;
  50. }
  51.  
  52. $smallNumber = array();
  53.  
  54. $spelling = array(
  55. 0 => 'ноль', 10 => 'десять', 100 => 'сто',
  56. 1 => 'один', 11 => 'одиннадцать', 20 => 'двадцать', 200 => 'двести',
  57. 2 => 'два', 12 => 'двенадцать', 30 => 'тридцать', 300 => 'триста',
  58. 3 => 'три', 13 => 'тринадцать', 40 => 'сорок', 400 => 'четыреста',
  59. 4 => 'четыре', 14 => 'четырнадцать', 50 => 'пятьдесят', 500 => 'пятьсот',
  60. 5 => 'пять', 15 => 'пятнадцать', 60 => 'шестьдесят', 600 => 'шестьсот',
  61. 6 => 'шесть', 16 => 'шестнадцать', 70 => 'семьдесят', 700 => 'семьсот',
  62. 7 => 'семь', 17 => 'семнадцать', 80 => 'восемьдесят', 800 => 'восемьсот',
  63. 8 => 'восемь', 18 => 'восемнадцать', 90 => 'девяносто', 900 => 'девятьсот',
  64. 9 => 'девять', 19 => 'девятнадцать'
  65. );
  66.  
  67. $femaleSpelling = array(
  68. 1 => 'одна', 2 => 'две'
  69. );
  70.  
  71. if($number >= 100){ // Находим трехзначные числа
  72. $firstRoundNum = floor($number/100) * 100;
  73. $smallNumber[] = $spelling[$firstRoundNum];
  74. }
  75. $secondNum = $number%100; // Находим двузначные числа
  76. if($secondNum < 20){ // В случае когда двузначные числа меньше 20
  77. $smallNumber[] = $spelling[$secondNum]; // Находим единицы
  78. }elseif($secondNum%10 == 0){ //Когда двузначное число заканчивается нулем
  79. $smallNumber[] = $spelling[$secondNum];
  80. }else{ //В случае когда двузначные числа >= 20
  81. $secondRoundNum = floor($secondNum/10) * 10;
  82. $smallNumber[] = $spelling[$secondRoundNum];
  83. $thirdRoundNum = $number%10;
  84.  
  85. if ($thirdRoundNum == 1 || $thirdRoundNum == 2 && $isFemale == 1){ // Проверка на тысячи
  86. $smallNumber[] = $femaleSpelling[$thirdRoundNum];
  87. }else{
  88. $smallNumber[] = $spelling[$thirdRoundNum];
  89. }
  90. }
  91.  
  92. $smallText = implode(' ', $smallNumber); // Клеем массив пробелами
  93. return $smallText;
  94. }
  95. // Идем на 3 оборота чтоб прогнать разбитую на 3 части цифру по функциям
  96. for($i = 0; $i < 3; $i++){
  97. $numerToText = getSmallNumber($declinateArray[$i]['number'], $declinateArray[$i]['isFemale']);
  98. $declination = declinateNumbers($declinateArray[$i]['number'], $declinateArray[$i]['letter1'], $declinateArray[$i]['letter2'], $declinateArray[$i]['letter3']);
  99. $numText = $numText. $numerToText. ' '. $declination. ' ';
  100. }
  101. return $numText;
  102. }
  103.  
  104. $number = mt_rand(0, 999999999);
  105. $numText = returnText($number);
  106. print $numText;
Success #stdin #stdout 0.03s 52480KB
stdin
Standard input is empty
stdout
девятьсот семьдесят девять миллионов пятьсот двадцать две тысячи пятьсот шестьдесят шесть рублей