3v4l.org

run code in 200+ php & hhvm versions
<?php error_reporting(-1); mb_internal_encoding('utf-8'); /* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */ //создадим массивы в массиве, чтобы можно было искать по типу $массив[k][i] где //k это тип слова (зависит от обрабатываемой тройки цифр), а i рассчитывается по алгоритму{ function inclineWord($number, $type) { $type1 = array( 0 => 'миллион', 1 => 'миллиона', 2 => 'миллионов' ); $type2 = array( 0 => 'тысяча', 1 => 'тысячи', 2 => 'тысяч' ); $type3 = array( 0 => 'рубль.', 1 => 'рубля.', 2 => 'рублей.' ); $union = array( 0 => $type1, 1 => $type2, 2 => $type3 ); $i = getFinalWord($number); return ($union[$type][$i]); } //} function smallNumberToText($number, $isFemale) { $spelling = array( 0 => '', 10 => 'десять', 100 => 'сто', 1 => 'один', 11 => 'одиннадцать', 20 => 'двадцать', 200 => 'двести', 2 => 'два', 12 => 'двенадцать', 30 => 'тридцать', 300 => 'триста', 3 => 'три', 13 => 'тринадцать', 40 => 'сорок', 400 => 'четыреста', 4 => 'четыре', 14 => 'четырнадцать', 50 => 'пятьдесят', 500 => 'пятьсот', 5 => 'пять', 15 => 'пятнадцать', 60 => 'шестьдесят', 600 => 'шестьсот', 6 => 'шесть', 16 => 'шестнадцать', 70 => 'семьдесят', 700 => 'семьсот', 7 => 'семь', 17 => 'семнадцать', 80 => 'восемьдесят', 800 => 'восемьсот', 8 => 'восемь', 18 => 'восемнадцать', 90 => 'девяносто', 900 => 'девятьсот', 9 => 'девять', 19 => 'девятнадцать' ); $femaleSpelling = array( 1 => 'одна', 2 => 'две' ); $words = array(); //сотни{ if ($number > 99){ $words[0] = $spelling[(floor($number/100))*100]; } //} //две последних цифры, у которых может быть своё общее название{ $check = $number % 100; if ($check >= 10 && $check <= 19){ $words[1] = $spelling[$check]; //если общего названия нет, то работаем с каждой цифрой по отдельности } else { //десятки if ((floor($check/10))*10 <> 0){ $words[1] = $spelling[(floor($check/10))*10]; } //единицы if ($check % 10 <> 0){ if($isFemale == true && ($check % 10 <= 2)){ $words[2] = $femaleSpelling[$check % 10]; }else{ $words[2] = $spelling[$check % 10]; } } } //} $text = implode(" ", $words); return $text; } //разбиваем исходное число на тройки и помещаем в массив{ function spellSmallNumber($number){ $numbers = array(); $numbers[0] = floor($number / 1000000); $numbers[1] = floor(($number % 1000000)/1000); $numbers[2] = $number % 1000; return ($numbers); } //} function numberToText($number) { $text = ""; //если цифра задана 0, но и считать её не нужно, пишем "ноль"{ if ($number <> 0){ $numbers = spellSmallNumber($number); //$count будет использоваться в массиве $union для поиска словоформ, при проходе каждой тройки увеличивается //0 - миллионы, 1 - тысячи, 2 - сотни{ $count = 0; //} //будем писать все слова, составляющие цифру, в один финальный массив //$i будет служить для счетчика ключа{ $i = 0; $finalArray = array(); //} foreach ($numbers as $oneNumber) { //женский род только у тысячи, т.е. у типа 1{ if ($count == 1){ $isFemale = true; }else{ $isFemale = false; } //} //если группа из 3х цифр равна 0, то нет смысла искать ей слово разрядности и вообще превращать в слово if ($oneNumber <> 0){ $finalArray[$i] = smallNumberToText($oneNumber, $isFemale); $i++; //если это последняя группа (сотни), то слова разрядности искать не нужно if ($count <> 2){ $finalArray[$i] = inclineWord($oneNumber, $count); $i++; } //} } //} $count++; } $text = implode(" ", $finalArray); } else { $text = "ноль"; } //} return $text; } //работа с поиском нужной словоформы. для этого определим 2 последних числа //и если они не в промежутке от 5 до 20, то работаем с последней цифрой{ function getFinalWord($number){ if ($number >= 5 && $number <= 20){ return(2); } elseif($number >= 21){ $number = $number%10; return(checking($number)); } else{ return(checking($number)); } } //} function checking($number){ if ($number == 1){ return(0); }elseif($number >= 2 && $number <= 4){ return(1); }else{ return(2); } } $amount1 = mt_rand(1,99999999); //$amount1 = 7000000; echo "{$amount1}\n"; $text1 = numberToText($amount1); //ищем, какую форму надо поставить у слова "рубль"{ $finalWord = inclineWord($amount1 % 100, 2); //} echo "На вашем счету: {$text1} {$finalWord}\n";
based on VG05G
Output for 7.1.7
9697939 На вашем счету: девять миллионов шестьсот девяносто семь тысяч девятьсот тридцать девять рублей.
Output for 7.1.6
30630957 На вашем счету: тридцать миллионов шестьсот тридцать тысяч девятьсот пятьдесят семь рублей.
Output for 7.1.5
64753863 На вашем счету: шестьдесят четыре миллиона семьсот пятьдесят три тысячи восемьсот шестьдесят три рубля.
Output for 7.1.3
91396218 На вашем счету: девяносто один миллион триста девяносто шесть тысяч двести восемнадцать рублей.
Output for 7.1.2
91939759 На вашем счету: девяносто один миллион девятьсот тридцать девять тысяч семьсот пятьдесят девять рублей.
Output for 7.1.1
88435289 На вашем счету: восемьдесят восемь миллионов четыреста тридцать пять тысяч двести восемьдесят девять рублей.
Output for 7.1.0
72222812 На вашем счету: семьдесят два миллиона двести двадцать две тысячи восемьсот двенадцать рублей.
Output for 7.0.20
87339306 На вашем счету: восемьдесят семь миллионов триста тридцать девять тысяч триста шесть рублей.
Output for 7.0.17
78382800 На вашем счету: семьдесят восемь миллионов триста восемьдесят две тысячи восемьсот рублей.
Output for 7.0.16
53373956 На вашем счету: пятьдесят три миллиона триста семьдесят три тысячи девятьсот пятьдесят шесть рублей.
Output for 7.0.15
73767799 На вашем счету: семьдесят три миллиона семьсот шестьдесят семь тысяч семьсот девяносто девять рублей.
Output for 7.0.14
56609914 На вашем счету: пятьдесят шесть миллионов шестьсот девять тысяч девятьсот четырнадцать рублей.
Output for 7.0.13
44204695 На вашем счету: сорок четыре миллиона двести четыре тысячи шестьсот девяносто пять рублей.
Output for 7.0.12
59415655 На вашем счету: пятьдесят девять миллионов четыреста пятнадцать тысяч шестьсот пятьдесят пять рублей.
Output for 7.0.11
55101794 На вашем счету: пятьдесят пять миллионов сто одна тысяча семьсот девяносто четыре рубля.
Output for 7.0.10
85772194 На вашем счету: восемьдесят пять миллионов семьсот семьдесят две тысячи сто девяносто четыре рубля.
Output for 7.0.9
75689933 На вашем счету: семьдесят пять миллионов шестьсот восемьдесят девять тысяч девятьсот тридцать три рубля.
Output for 7.0.8
72100109 На вашем счету: семьдесят два миллиона сто тысяч сто девять рублей.
Output for 7.0.7
908237 На вашем счету: девятьсот восемь тысяч двести тридцать семь рублей.
Output for 7.0.6
49802863 На вашем счету: сорок девять миллионов восемьсот две тысячи восемьсот шестьдесят три рубля.
Output for 7.0.5
34287965 На вашем счету: тридцать четыре миллиона двести восемьдесят семь тысяч девятьсот шестьдесят пять рублей.
Output for 7.0.4
8450584 На вашем счету: восемь миллионов четыреста пятьдесят тысяч пятьсот восемьдесят четыре рубля.
Output for 7.0.3
17754766 На вашем счету: семнадцать миллионов семьсот пятьдесят четыре тысячи семьсот шестьдесят шесть рублей.
Output for 7.0.2
37971064 На вашем счету: тридцать семь миллионов девятьсот семьдесят одна тысяча шестьдесят четыре рубля.
Output for 7.0.1
13915208 На вашем счету: тринадцать миллионов девятьсот пятнадцать тысяч двести восемь рублей.
Output for 7.0.0
29484397 На вашем счету: двадцать девять миллионов четыреста восемьдесят четыре тысячи триста девяносто семь рублей.
Output for hhvm-3.17.3
90235763 На вашем счету: девяносто миллионов двести тридцать пять тысяч семьсот шестьдесят три рубля.
Output for hhvm-3.15.4
8260244 На вашем счету: восемь миллионов двести шестьдесят тысяч двести сорок четыре рубля.
Output for hhvm-3.12.14
21424069 На вашем счету: двадцать один миллион четыреста двадцать четыре тысячи шестьдесят девять рублей.
Output for 5.6.30
96265664 На вашем счету: девяносто шесть миллионов двести шестьдесят пять тысяч шестьсот шестьдесят четыре рубля.
Output for 5.6.29
28444872 На вашем счету: двадцать восемь миллионов четыреста сорок четыре тысячи восемьсот семьдесят два рубля.
Output for 5.6.28
32451932 На вашем счету: тридцать два миллиона четыреста пятьдесят одна тысяча девятьсот тридцать два рубля.
Output for 5.6.27
70543039 На вашем счету: семьдесят миллионов пятьсот сорок три тысячи тридцать девять рублей.
Output for 5.6.26
40281784 На вашем счету: сорок миллионов двести восемьдесят одна тысяча семьсот восемьдесят четыре рубля.
Output for 5.6.25
20105967 На вашем счету: двадцать миллионов сто пять тысяч девятьсот шестьдесят семь рублей.
Output for 5.6.24
43163757 На вашем счету: сорок три миллиона сто шестьдесят три тысячи семьсот пятьдесят семь рублей.
Output for 5.6.23
75473459 На вашем счету: семьдесят пять миллионов четыреста семьдесят три тысячи четыреста пятьдесят девять рублей.
Output for 5.6.22
59696917 На вашем счету: пятьдесят девять миллионов шестьсот девяносто шесть тысяч девятьсот семнадцать рублей.
Output for 5.6.21
34227931 На вашем счету: тридцать четыре миллиона двести двадцать семь тысяч девятьсот тридцать один рубль.
Output for 5.6.20
37124397 На вашем счету: тридцать семь миллионов сто двадцать четыре тысячи триста девяносто семь рублей.
Output for 5.6.19
75566886 На вашем счету: семьдесят пять миллионов пятьсот шестьдесят шесть тысяч восемьсот восемьдесят шесть рублей.
Output for 5.6.18
5297788 На вашем счету: пять миллионов двести девяносто семь тысяч семьсот восемьдесят восемь рублей.
Output for 5.6.17
89453402 На вашем счету: восемьдесят девять миллионов четыреста пятьдесят три тысячи четыреста два рубля.
Output for 5.6.16
61913813 На вашем счету: шестьдесят один миллион девятьсот тринадцать тысячи восемьсот тринадцать рублей.
Output for 5.6.15
90242262 На вашем счету: девяносто миллионов двести сорок две тысячи двести шестьдесят два рубля.
Output for 5.6.14
70926153 На вашем счету: семьдесят миллионов девятьсот двадцать шесть тысяч сто пятьдесят три рубля.
Output for 5.6.13
70263850 На вашем счету: семьдесят миллионов двести шестьдесят три тысячи восемьсот пятьдесят рублей.
Output for 5.6.12
43733024 На вашем счету: сорок три миллиона семьсот тридцать три тысячи двадцать четыре рубля.
Output for 5.6.11
20705310 На вашем счету: двадцать миллионов семьсот пять тысяч триста десять рублей.
Output for 5.6.10
96646430 На вашем счету: девяносто шесть миллионов шестьсот сорок шесть тысяч четыреста тридцать рублей.
Output for 5.6.9
50094784 На вашем счету: пятьдесят миллионов девяносто четыре тысячи семьсот восемьдесят четыре рубля.
Output for 5.6.8
34141046 На вашем счету: тридцать четыре миллиона сто сорок одна тысяча сорок шесть рублей.
Output for 5.6.7
30890652 На вашем счету: тридцать миллионов восемьсот девяносто тысяч шестьсот пятьдесят два рубля.
Output for 5.6.6
88633374 На вашем счету: восемьдесят восемь миллионов шестьсот тридцать три тысячи триста семьдесят четыре рубля.
Output for 5.6.5
24847386 На вашем счету: двадцать четыре миллиона восемьсот сорок семь тысяч триста восемьдесят шесть рублей.
Output for 5.6.4
27460664 На вашем счету: двадцать семь миллионов четыреста шестьдесят тысяч шестьсот шестьдесят четыре рубля.
Output for 5.6.3
16212178 На вашем счету: шестнадцать миллионов двести двенадцать тысячи сто семьдесят восемь рублей.
Output for 5.6.2
10402769 На вашем счету: десять миллионов четыреста две тысячи семьсот шестьдесят девять рублей.
Output for 5.6.1
35111327 На вашем счету: тридцать пять миллионов сто одиннадцать тысяча триста двадцать семь рублей.
Output for 5.6.0
52927222 На вашем счету: пятьдесят два миллиона девятьсот двадцать семь тысяч двести двадцать два рубля.