<?php
// Staring straight up into the sky ... oh my my
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord($number) {
$last2Digits = $number % 100;
$lastDigit = $number % 10;
$word1 = " ($number) рубль";
$word2 = " ($number) рубля";
$word5 = " ($number) рублей";
if($last2Digits >= 10 && $last2Digits <= 19){
return $word5;
}
elseif($lastDigit >= 5 && $lastDigit <= 9){
return $word5;
}
elseif($lastDigit == 1){
return $word1;
}
elseif($lastDigit >= 2 && $lastDigit <= 4){
return $word2;
}
}
function smallNumberToText($number, $isFemale) {
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 => 'девятнадцать'
);
1 => 'одна', 2 => 'две'
);
$res = "";
if($isFemale == 1){
$first = floor($number / 100)*100; $second = floor(($number - $first)/10)*10; $third = $number % 10;
if((($second < 11 && $second > 19) || $second == 0) && $first != 0){
return $spelling[$first]." ".$femaleSpelling[$third];
}
elseif($first == 0){
return $spelling[$second]." ".$femaleSpelling[$third];
}
elseif($first == 0 && $second == 0){
return $femaleSpelling[$third];
}
else{
return $spelling[$first]." ".$spelling[$second]." ".$femaleSpelling[$third];
}}
elseif($number % 100 == 0){
return $spelling[$number];
}
elseif($number >=1 && $number <= 19){
return $spelling[$number];
}
elseif($number >= 20 && $number <= 99){
$first = floor($number/10)*10; $second = $number - $first;
$res = $spelling[$first]." ".$spelling[$second];
return $res;
}
else{
$first = floor($number / 100)*100; $third = $number - ($first + $second);
if((($number - $first)>=11) && (($number-$first))<=19){
$second = $number - $first;
$res = $spelling[$first]." ".$spelling[$second];
}
else{
$second = floor(($number - $first)/10)*10; $third = $number - ($first + $second);
if(($first != 0)&&($second != 0)&&($third != 0)){
$res = $spelling[$first]." ".$spelling[$second]." ".$spelling[$third];
}
elseif($second == 0){
$res = $spelling[$first]." ".$spelling[$third];
}
elseif($third == 0){
$res = $spelling[$first]." ".$spelling[$second];
}
}
return $res;
}
}
function Thousand($number){
$result = "";
$ending = "";
if($number < 1000){
return smallNumberToText($number);
}
if((((((floor($number / 1000)%10>= 5) && (floor($number / 1000)%10 <= 9 ))||(floor($number / 1000)%100 >= 10 && floor($number / 1000)%100 <= 19))||(floor($number / 1000) % 10 == 0)))){ $ending = "ч";
}
elseif((floor($number / 1000)%10 == 1) && ((floor($number / 1000) % 100)!= 11)){ $ending = "ча";
$fem = 1;
}
elseif((floor($number / 1000)%10 == 2) && (floor($number / 1000) % 100) != 12){ $ending = "чи";
$fem = 1;
}
elseif((floor($number / 1000)%10 >= 2 && (floor($number / 1000)%10 <= 4))){ $ending = "чи";
}
$result = smallNumberToText
(floor($number/1000), $fem)." тыся$ending ".smallNumberToText
($number - (floor($number/1000)*1000)); return $result;
}
function Million($number){
$ending = "";
$mill = floor($number / 1000000); $fem = 0;
if(((((floor($number / 1000000)%10>= 5) && (floor($number / 1000000)%10 <= 9 || floor($number / 1000000)%100 >= 10 && floor($number / 1000000)%100 <= 19)||floor($number / 1000000) % 10 == 0)))){ $ending = "ов";
}
elseif(floor($number / 1000000)%10 == 1){ $ending = "";
}
elseif(floor($number / 1000000)%10 >= 2 && floor($number / 1000000)%10 <= 4){ $ending = "а";
}
return smallNumberToText
($mill, $fem)." миллион$ending ".Thousand
($number - (floor($number / 1000000)*1000000)); }
function numberToText($number) {
if($number == 0){
$result = "ноль";
}
elseif($number <= 999){
$result = smallNumberToText($number);
}
elseif(($number >= 1000)&&($number <= 999999)){
$result = Thousand($number);
}
elseif($number >= 1000000 && $number <= 99999999){
$result = Million($number);
}
return $result.inclineWord($number);
}
/* Вызовем функцию несколько раз */
$amount1 = 2000001;
$text1 = numberToText($amount1);
echo "На вашем счету {$text1}\n";
$text2 = numberToText($amount2);
echo "На вашем счету {$text2}\n";
$text3 = numberToText($amount3);
echo "На вашем счету {$text3}\n";
$text4 = numberToText($amount4);
echo "На вашем счету {$text4}\n";