<?php
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord( $number , $word1 , $word2 , $word3 ) {
if ( $number % 100 > 10 and $number % 100 < 20 ) {
$number %= 100 ;
} elseif ( $number > 0 ) {
$number %= 10 ;
}
if ( $number == 1 ) {
$word = $word1 ;
} elseif ( $number >= 2 and $number <= 4 ) {
$word = $word2 ;
} elseif ( $number >= 5 and $number <= 9 or $number > 10 and $number < 20 or $number == 0 ) {
$word = $word3 ;
}
return $word ;
}
/*
Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю,
если мы считаем число для мужского рода (один рубль),
и 1 — для женского (одна тысяча). Параметр $lengthOfNumber передает
полный размер внешнего числа и помогает обработать число ноль.
*/
function smallNumberToText( $number , $isFemale , $lengthOfNumber ) {
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 => 'девятнадцать'
) ;
if ( $isFemale ) {
1 => 'одна' ,
2 => 'две'
) ;
$spelling = array_replace( $spelling , $femaleSpelling ) ;
}
if ( $lengthOfNumber == 0 or $number >= 1 and $number <= 19 ) {
$words [ ] = $spelling [ $number ] ;
} elseif ( $number >= 10 and $number <= 99 ) {
if ( $number % 10 != 0 ) {
$words [ ] = $spelling [ $number % 10 ] ;
}
$number = floor ( $number / 10 ) ; $words [ ] = $spelling [ $number * 10 ] ;
} elseif ( $number >= 100 and $number <= 999 ) {
if ( $number % 100 != 0 ) {
if ( $number % 100 > 10 and $number % 100 < 20 ) {
$words [ ] = $spelling [ $number % 100 ] ;
$number = floor ( $number / 100 ) ;
} else {
if ( $number % 10 != 0 ) {
$words [ ] = $spelling [ $number % 10 ] ;
}
$number = floor ( $number / 10 ) ; if ( $number % 10 != 0 ) {
$words [ ] = $spelling [ $number % 10 * 10 ] ;
}
$number = floor ( $number / 10 ) ;
}
} else {
$number = floor ( $number / 100 ) ; }
$words [ ] = $spelling [ $number * 100 ] ;
}
return $text ;
}
function numberToText( $number ) {
$divisibleNumber = $number ;
0 => array ( 0 => 'рубль' , 1 => 'рубля' , 2 => 'рублей' ) , 1 => array ( 0 => 'тысяча' , 1 => 'тысячи' , 2 => 'тысяч' ) , 2 => array ( 0 => 'миллион' , 1 => 'миллиона' , 2 => 'миллионов' ) ) ;
$lengthOfNumber = ( $number == 0 ) ?
0 : floor ( log10 ( $number ) + 1 ) ;
for ( $x = 0 ; $x < ceil ( $lengthOfNumber / 3 ) or
$x == 0 ; $x ++ ) {
$numbers [ ] = $divisibleNumber % 1000 ;
$divisibleNumber = floor ( $divisibleNumber / 1000 ) ;
$isFemale = ( $x == 1 and $numbers [ 1 ] % 10 == 1 or $x == 1 and $numbers [ 1 ] % 10 == 2 ) ? 1 : 0 ;
$numberToText = smallNumberToText( $numbers [ $x ] , $isFemale , $lengthOfNumber ) ;
$inclinedWord = inclineWord( $numbers [ $x ] , $spelling [ $x ] [ 0 ] , $spelling [ $x ] [ 1 ] , $spelling [ $x ] [ 2 ] ) ;
if ( $x == 0 ) {
if ( $numberToText ) {
$text = $numberToText ;
}
$text = $text . ' ' . "($number )" . ' ' . $inclinedWord ;
} else {
$text = "($number )" . ' ' . $inclinedWord ;
}
} else {
if ( $numberToText ) {
$text = $numberToText . ' ' . $inclinedWord . ' ' . $text ;
}
}
}
return $text ;
}
/* Вызовем функцию несколько раз */
$text1 = numberToText( $amount1 ) ;
echo "На вашем счету: {$text1} \n " ;
$text2 = numberToText( $amount2 ) ;
echo "На вашем счету: {$text2} \n " ;
$text3 = numberToText( $amount3 ) ;
echo "На вашем счету: {$text3} \n " ;
$text4 = numberToText( $amount4 ) ;
echo "На вашем счету: {$text4} \n " ;
$text5 = numberToText( $amount5 ) ;
echo "На вашем счету: {$text5} \n " ;
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7CgovKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidGD0Y4g0YfQuNGB0LvRgyDRhNC+0YDQvNGDINGB0LvQvtCy0LA6IDEg0YDRg9Cx0LvRjCwgMiDRgNGD0LHQu9GPLCA1INGA0YPQsdC70LXQuSAqLwpmdW5jdGlvbiBpbmNsaW5lV29yZCgkbnVtYmVyLCAkd29yZDEsICR3b3JkMiwgJHdvcmQzKSB7CgogICAgaWYgKCRudW1iZXIgJSAxMDAgPiAxMCBhbmQgJG51bWJlciAlIDEwMCA8IDIwKSB7CiAgICAgICAgJG51bWJlciAlPSAxMDA7CiAgICB9IGVsc2VpZiAoJG51bWJlciA+IDApIHsKICAgICAgICAkbnVtYmVyICU9IDEwOwogICAgfQoKICAgIGlmICgkbnVtYmVyID09IDEpIHsKICAgICAgICAkd29yZCA9ICR3b3JkMTsKICAgIH0gZWxzZWlmICgkbnVtYmVyID49IDIgYW5kICRudW1iZXIgPD0gNCkgewogICAgICAgICR3b3JkID0gJHdvcmQyOwogICAgfSBlbHNlaWYgKCRudW1iZXIgPj0gNSBhbmQgJG51bWJlciA8PSA5IG9yICRudW1iZXIgPiAxMCBhbmQgJG51bWJlciA8IDIwIG9yICRudW1iZXIgPT0gMCkgewogICAgICAgICR3b3JkID0gJHdvcmQzOwogICAgfQoKICAgIHJldHVybiAkd29yZDsKfQoKLyogCiAgICDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINGH0LjRgdC70LAg0L7RgiAwINC00L4gOTk5INCyINGC0LXQutGB0YIuINCf0LDRgNCw0LzQtdGC0YAgJGlzRmVtYWxlINGA0LDQstC10L0g0L3Rg9C70Y4sIAogICAg0LXRgdC70Lgg0LzRiyDRgdGH0LjRgtCw0LXQvCDRh9C40YHQu9C+INC00LvRjyDQvNGD0LbRgdC60L7Qs9C+INGA0L7QtNCwICjQvtC00LjQvSDRgNGD0LHQu9GMKSwgCiAgICDQuCAxIOKAlCDQtNC70Y8g0LbQtdC90YHQutC+0LPQviAo0L7QtNC90LAg0YLRi9GB0Y/Rh9CwKS4g0J/QsNGA0LDQvNC10YLRgCAkbGVuZ3RoT2ZOdW1iZXIg0L/QtdGA0LXQtNCw0LXRggogICAg0L/QvtC70L3Ri9C5INGA0LDQt9C80LXRgCDQstC90LXRiNC90LXQs9C+INGH0LjRgdC70LAg0Lgg0L/QvtC80L7Qs9Cw0LXRgiDQvtCx0YDQsNCx0L7RgtCw0YLRjCDRh9C40YHQu9C+INC90L7Qu9GMLgoqLwpmdW5jdGlvbiBzbWFsbE51bWJlclRvVGV4dCgkbnVtYmVyLCAkaXNGZW1hbGUsICRsZW5ndGhPZk51bWJlcikgewoKICAgICRzcGVsbGluZyA9IGFycmF5KAogICAgICAgIDAgICA9PiAgJ9C90L7Qu9GMJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgID0+ICAn0LTQtdGB0Y/RgtGMJywgICAgICAgMTAwID0+ICAn0YHRgtC+JywKICAgICAgICAxICAgPT4gICfQvtC00LjQvScsICAgICAgICAgMTEgID0+ICAn0L7QtNC40L3QvdCw0LTRhtCw0YLRjCcsICAgICAgMjAgID0+ICAn0LTQstCw0LTRhtCw0YLRjCcsICAgICAyMDAgPT4gICfQtNCy0LXRgdGC0LgnLAogICAgICAgIDIgICA9PiAgJ9C00LLQsCcsICAgICAgICAgIDEyICA9PiAgJ9C00LLQtdC90LDQtNGG0LDRgtGMJywgICAgICAgMzAgID0+ICAn0YLRgNC40LTRhtCw0YLRjCcsICAgICAzMDAgPT4gICfRgtGA0LjRgdGC0LAnLAogICAgICAgIDMgICA9PiAgJ9GC0YDQuCcsICAgICAgICAgIDEzICA9PiAgJ9GC0YDQuNC90LDQtNGG0LDRgtGMJywgICAgICAgNDAgID0+ICAn0YHQvtGA0L7QuicsICAgICAgICA0MDAgPT4gICfRh9C10YLRi9GA0LXRgdGC0LAnLAogICAgICAgIDQgICA9PiAgJ9GH0LXRgtGL0YDQtScsICAgICAgIDE0ICA9PiAgJ9GH0LXRgtGL0YDQvdCw0LTRhtCw0YLRjCcsICAgICA1MCAgPT4gICfQv9GP0YLRjNC00LXRgdGP0YInLCAgICA1MDAgPT4gICfQv9GP0YLRjNGB0L7RgicsCiAgICAgICAgNSAgID0+ICAn0L/Rj9GC0YwnLCAgICAgICAgIDE1ICA9PiAgJ9C/0Y/RgtC90LDQtNGG0LDRgtGMJywgICAgICAgNjAgID0+ICAn0YjQtdGB0YLRjNC00LXRgdGP0YInLCAgIDYwMCA9PiAgJ9GI0LXRgdGC0YzRgdC+0YInLAogICAgICAgIDYgICA9PiAgJ9GI0LXRgdGC0YwnLCAgICAgICAgMTYgID0+ICAn0YjQtdGB0YLQvdCw0LTRhtCw0YLRjCcsICAgICAgNzAgID0+ICAn0YHQtdC80YzQtNC10YHRj9GCJywgICAgNzAwID0+ICAn0YHQtdC80YzRgdC+0YInLCAgICAKICAgICAgICA3ICAgPT4gICfRgdC10LzRjCcsICAgICAgICAgMTcgID0+ICAn0YHQtdC80L3QsNC00YbQsNGC0YwnLCAgICAgICA4MCAgPT4gICfQstC+0YHQtdC80YzQtNC10YHRj9GCJywgICA4MDAgPT4gICfQstC+0YHQtdC80YzRgdC+0YInLAogICAgICAgIDggICA9PiAgJ9Cy0L7RgdC10LzRjCcsICAgICAgIDE4ICA9PiAgJ9Cy0L7RgdC10LzQvdCw0LTRhtCw0YLRjCcsICAgICA5MCAgPT4gICfQtNC10LLRj9C90L7RgdGC0L4nLCAgICAgOTAwID0+ICAn0LTQtdCy0Y/RgtGM0YHQvtGCJywKICAgICAgICA5ICAgPT4gICfQtNC10LLRj9GC0YwnLCAgICAgICAxOSAgPT4gICfQtNC10LLRj9GC0L3QsNC00YbQsNGC0YwnICAgIAogICAgKTsKCiAgICBpZiAoJGlzRmVtYWxlKSB7CiAgICAgICAgJGZlbWFsZVNwZWxsaW5nID0gYXJyYXkoCiAgICAgICAgICAgIDEgICA9PiAgJ9C+0LTQvdCwJywgIAogICAgICAgICAgICAyICAgPT4gICfQtNCy0LUnCiAgICAgICAgKTsKICAgICAgICAkc3BlbGxpbmcgPSBhcnJheV9yZXBsYWNlKCRzcGVsbGluZywgJGZlbWFsZVNwZWxsaW5nKTsKICAgIH0KCiAgICAkd29yZHMgPSBhcnJheSgpOwogICAgCiAgICBpZiAoJGxlbmd0aE9mTnVtYmVyID09IDAgb3IgJG51bWJlciA+PSAxIGFuZCAkbnVtYmVyIDw9IDE5KSB7CiAgICAgICAgCiAgICAgICAgJHdvcmRzW10gPSAkc3BlbGxpbmdbJG51bWJlcl07CiAgICAKICAgIH0gZWxzZWlmICgkbnVtYmVyID49IDEwIGFuZCAkbnVtYmVyIDw9IDk5KSB7CiAgICAgICAgCiAgICAgICAgaWYgKCRudW1iZXIgJSAxMCAhPSAwKSB7CiAgICAgICAgICAgICR3b3Jkc1tdID0gJHNwZWxsaW5nWyRudW1iZXIgJSAxMF07CiAgICAgICAgfQogICAgICAgICRudW1iZXIgPSBmbG9vcigkbnVtYmVyIC8gMTApOwogICAgICAgICR3b3Jkc1tdID0gJHNwZWxsaW5nWyRudW1iZXIgKiAxMF07CiAgICAgICAgICAgIAogICAgfSBlbHNlaWYgKCRudW1iZXIgPj0gMTAwIGFuZCAkbnVtYmVyIDw9IDk5OSkgewogICAgICAgIAogICAgICAgIGlmICgkbnVtYmVyICUgMTAwICE9IDApIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgkbnVtYmVyICUgMTAwID4gMTAgYW5kICRudW1iZXIgJSAxMDAgPCAyMCkgewogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAkd29yZHNbXSA9ICRzcGVsbGluZ1skbnVtYmVyICUgMTAwXTsKICAgICAgICAgICAgICAgICRudW1iZXIgPSBmbG9vcigkbnVtYmVyIC8gMTAwKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoJG51bWJlciAlIDEwICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAkd29yZHNbXSA9ICRzcGVsbGluZ1skbnVtYmVyICUgMTBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJG51bWJlciA9IGZsb29yKCRudW1iZXIgLyAxMCk7CiAgICAgICAgICAgICAgICBpZiAoJG51bWJlciAlIDEwICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAkd29yZHNbXSA9ICRzcGVsbGluZ1skbnVtYmVyICUgMTAgKiAxMF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkbnVtYmVyID0gZmxvb3IoJG51bWJlciAvIDEwKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRudW1iZXIgPSBmbG9vcigkbnVtYmVyIC8gMTAwKTsKICAgICAgICB9CiAgICAgICAgJHdvcmRzW10gPSAkc3BlbGxpbmdbJG51bWJlciAqIDEwMF07CiAgICAgICAgCiAgICB9CgogICAgJHRleHQgPSBpbXBsb2RlKCcgJywgYXJyYXlfcmV2ZXJzZSgkd29yZHMpKTsKCiAgICByZXR1cm4gJHRleHQ7Cn0KCmZ1bmN0aW9uIG51bWJlclRvVGV4dCgkbnVtYmVyKSB7CgogICAgJGRpdmlzaWJsZU51bWJlciA9ICRudW1iZXI7CgogICAgJHNwZWxsaW5nID0gYXJyYXkoCiAgICAgICAgMCA9PiBhcnJheSgwID0+ICfRgNGD0LHQu9GMJywgMSA9PiAn0YDRg9Cx0LvRjycsIDIgPT4gJ9GA0YPQsdC70LXQuScpLAogICAgICAgIDEgPT4gYXJyYXkoMCA9PiAn0YLRi9GB0Y/Rh9CwJywgMSA9PiAn0YLRi9GB0Y/Rh9C4JywgMiA9PiAn0YLRi9GB0Y/RhycpLAogICAgICAgIDIgPT4gYXJyYXkoMCA9PiAn0LzQuNC70LvQuNC+0L0nLCAxID0+ICfQvNC40LvQu9C40L7QvdCwJywgMiA9PiAn0LzQuNC70LvQuNC+0L3QvtCyJykKICAgICk7CiAgICAKICAgICRsZW5ndGhPZk51bWJlciA9ICgkbnVtYmVyID09IDApID8gMCA6IGZsb29yKGxvZzEwKCRudW1iZXIpICsgMSk7CgogICAgZm9yICgkeCA9IDA7ICR4IDwgY2VpbCgkbGVuZ3RoT2ZOdW1iZXIgLyAzKSBvciAkeCA9PSAwOyAkeCsrKSB7CgogICAgICAgICRudW1iZXJzW10gPSAkZGl2aXNpYmxlTnVtYmVyICUgMTAwMDsKICAgICAgICAkZGl2aXNpYmxlTnVtYmVyID0gZmxvb3IoJGRpdmlzaWJsZU51bWJlciAvIDEwMDApOwoKICAgICAgICAkaXNGZW1hbGUgPSAoJHggPT0gMSBhbmQgJG51bWJlcnNbMV0gJSAxMCA9PSAxIG9yICR4ID09IDEgYW5kICRudW1iZXJzWzFdICUgMTAgPT0gMikgPyAxIDogMDsKCiAgICAgICAgJG51bWJlclRvVGV4dCA9IHNtYWxsTnVtYmVyVG9UZXh0KCRudW1iZXJzWyR4XSwgJGlzRmVtYWxlLCAkbGVuZ3RoT2ZOdW1iZXIpOwogICAgICAgICRpbmNsaW5lZFdvcmQgPSBpbmNsaW5lV29yZCgkbnVtYmVyc1skeF0sICRzcGVsbGluZ1skeF1bMF0sICRzcGVsbGluZ1skeF1bMV0sICRzcGVsbGluZ1skeF1bMl0pOwoKICAgICAgICBpZiAoJHggPT0gMCkgewogICAgICAgICAgICBpZiAoJG51bWJlclRvVGV4dCkgewogICAgICAgICAgICAgICAgJHRleHQgPSAkbnVtYmVyVG9UZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc3NldCgkdGV4dCkpIHsKICAgICAgICAgICAgICAgICR0ZXh0ID0gJHRleHQuJyAnLiIoJG51bWJlcikiLicgJy4kaW5jbGluZWRXb3JkOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRleHQgPSAiKCRudW1iZXIpIi4nICcuJGluY2xpbmVkV29yZDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICgkbnVtYmVyVG9UZXh0KSB7CiAgICAgICAgICAgICAgICAkdGV4dCA9ICRudW1iZXJUb1RleHQuJyAnLiRpbmNsaW5lZFdvcmQuJyAnLiR0ZXh0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkdGV4dDsKfQoKLyog0JLRi9C30L7QstC10Lwg0YTRg9C90LrRhtC40Y4g0L3QtdGB0LrQvtC70YzQutC+INGA0LDQtyAqLwoKJGFtb3VudDEgPSBtdF9yYW5kKDEsOTk5OTk5OTkpOwokdGV4dDEgPSBudW1iZXJUb1RleHQoJGFtb3VudDEpOwogCmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDOiB7JHRleHQxfVxuIjsKIAokYW1vdW50MiA9IG10X3JhbmQoMSw5OTk5OTk5OSk7CiR0ZXh0MiA9IG51bWJlclRvVGV4dCgkYW1vdW50Mik7CiAKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YM6IHskdGV4dDJ9XG4iOwogCiRhbW91bnQzID0gbXRfcmFuZCgxLDk5OTk5OTk5KTsKJHRleHQzID0gbnVtYmVyVG9UZXh0KCRhbW91bnQzKTsKIAplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgzogeyR0ZXh0M31cbiI7CiAKJGFtb3VudDQgPSBtdF9yYW5kKDEsOTk5OTk5OTkpOwokdGV4dDQgPSBudW1iZXJUb1RleHQoJGFtb3VudDQpOwogCmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDOiB7JHRleHQ0fVxuIjsKCiRhbW91bnQ1ID0gbXRfcmFuZCgxLDk5OTk5OTk5KTsKJHRleHQ1ID0gbnVtYmVyVG9UZXh0KCRhbW91bnQ1KTsKIAplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgzogeyR0ZXh0NX1cbiI7