<?php

// Staring straight up into the sky ... oh my my
error_reporting(-1);
mb_internal_encoding('utf-8');


/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord($number, $word1, $word2, $word5)
{
    $lastd = $number % 100;
    if ($lastd != 11 && $number % 10 == 1) {
        $words = $word1;
    } elseif ($number % 10 > 1 && $number % 10 < 5 && ($lastd < 10 || $lastd > 20)) {
        $words = $word2;
    } else {
        $words = $word5;
    }
    
    return $words;
    /* DIY */
}

/* 
Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю, 
если мы считаем число для мужского рода (один рубль), 
и 1 — для женского (одна тысяча) 
*/
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 => 'две'
    );
    
    
    $hund = $number % 100;
    if ($hund == 0) {
        $fulltext = "";
    } elseif ($hund > 20) {
        $hund1 = (floor($hund / 10)) * 10;
        $hund2 = $hund % 10;
        if ($hund2 == 0) {
            $fulltext = $spelling[$hund1];
        } elseif ($isFemale == 1) {
            $fulltext = $spelling[$hund1] . " " . $femaleSpelling[$hund2];
        } else {
            $fulltext = $spelling[$hund1] . " " . $spelling[$hund2];
        }
    } else {
        if ($isFemale == 1 && $hund < 11) {
            $fulltext = $femaleSpelling[$hund];
        } else {
            $fulltext = $spelling[$hund];
        }
    }
    $tho = $number % 1000;
    if ($tho >= 100) {
        $tho      = (floor($tho / 100)) * 100;
        $fulltext = $spelling[$tho] . " " . $fulltext;
    }
    
    return $fulltext;
    
    
    /* DIY */
}


function numberToText($number)
{
    if ($number < 1000) {
        $text = smallNumberToText($number, 0) . " " . inclineWord($number, "рубль", "рубля", "рублей");
    } elseif ($number >= 1000) {
        $mod    = $number % 10000;
        $mod    = floor($mod / 1000);
        $last2d = floor(($number % 100000) / 1000);
        if ($mod == 1 && ($last2d < 11 || $last2d > 20)) {
            $mod  = 1;
            $word = "тысяча";
        } elseif ($mod == 2 && ($last2d < 11 || $last2d > 20)) {
            $mod  = 1;
            $word = "тысячи";
        } elseif ($mod > 2 && $mod < 5) {
            $mod  = 0;
            $word = "тысячи";
        } else {
            $mod  = 0;
            $word = "тысяч";
        }
        
        $thou = $number / 1000;
        
        $text = smallNumberToText($thou, $mod) . " $word " . smallNumberToText($number, 0) . " " . inclineWord($number, "рубль", "рубля", "рублей");
    }
    if ($number >= 1000000) {
        
        
        $bill   = floor($number / 1000000);
        $check  = $bill % 10;
        $check2 = $bill % 100;
        
        if ($check == 1 && ($check2 < 11 || $check2 > 20)) {
            $word2 = "миллион";
        } elseif ($check > 1 && $check < 5 && ($check2 < 11 || $check2 > 20)) {
            $word2 = "миллиона";
        } else {
            $word2 = "миллионов";
        }
        $text = smallNumberToText($bill, 0) . " $word2 " . $text;
    }
    
    /* DIY */
    return $text;
}

/* Вызовем функцию несколько раз */
$amount1 = 51111111;
$text1   = numberToText($amount1);

echo "На вашем счету {$text1}\n";

$amount2 = mt_rand(1, 99999999);
$text2   = numberToText($amount2);

echo "На вашем счету {$text2}\n";

$amount3 = mt_rand(1, 99999999);
$text3   = numberToText($amount3);

echo "На вашем счету {$text3}\n";

$amount4 = mt_rand(1, 99999999);
$text4   = numberToText($amount4);

echo "На вашем счету {$text4}\n";