<?php
 
error_reporting(-1);
mb_internal_encoding('utf-8');

$end = array(
	0 => array(
		0 => "миллион",
		1 => "миллиона",
		2 => "миллионов"
	),
	1 => array(
		0 => "тысяча",
		1 => "тысячи",
		2 => "тысяч"
	),
	2 => array(
		0 => "рубль",
		1 => "рубля",
		2 => "рублей"
	)
);

/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord($endingNumber, $end) {
	
	if (($endingNumber % 100 >= 10) && ($endingNumber % 100 <= 19)) {
		$endingNumber = $endingNumber % 100;
	} else {
		$endingNumber = $endingNumber % 10;
	}
 
    if ($endingNumber == 1){
        $word = $end[0];
    } elseif (($endingNumber >= 2) && ($endingNumber <= 4)) {
	    $word = $end[1];
    } else {
	    $word = $end[2];
    }
 
	return $word;
}

function writeThousand($key, $discharge, $spelling) {
	
	if (($discharge == 1) && ($key == 1)) {
		return 'одна';					
	} elseif (($discharge == 2) && ($key == 1)) {
		return 'две';					
	} else {
		return $spelling[$discharge];
	}
}
 
//разбивает число на миллионы, тысяча и сотни
function splitToParts($number) {
	
	$hundred = $number % 1000;
   
    
    $thousand = $number % 1000000 / 1000;
    $thousand = floor($thousand);
 
    $million = $number % 1000000000 / 1000000;
	$million = floor ($million);
 
	$level = array(
	    0 => $million,
		1 => $thousand,
		2 => $hundred
	);
	
	return $level;
}
 
//переводит числовое число в текстовое 
function smallNumberToarrayOfWords($number, $end) {
	
    $spelling = array(
        0   =>  'ноль',                                           
        1   =>  'один',                   
        2   =>  'два',                   
        3   =>  'три',                        
        4   =>  'четыре',              
        5   =>  'пять',                
        6   =>  'шесть',                   
        7   =>  'семь',                 
        8   =>  'восемь',            
        9   =>  'девять',
        10  =>  'десять', 	
        11  =>  'одиннадцать',	
        12  =>  'двенадцать',  
        13  =>  'тринадцать', 
        14  =>  'четырнадцать',  
        15  =>  'пятнадцать',   
        16  =>  'шестнадцать', 
        17  =>  'семнадцать',  
        18  =>  'восемнадцать',    
	    19  =>  'девятнадцать',  
        20  =>  'двадцать', 	
        30  =>  'тридцать',
        40  =>  'сорок',
        50  =>  'пятьдесят',
        60  =>  'шестьдесят',
        70  =>  'семьдесят', 
        80  =>  'восемьдесят',
        90  =>  'девяносто',
        100 =>  'сто',
        200 =>  'двести',
        300 =>  'триста',
        400 =>  'четыреста',
        500 =>  'пятьсот',
        600 =>  'шестьсот',
        700 =>  'семьсот', 
        800 =>  'восемьсот',
        900 =>  'девятьсот',
    ); 
	
	$level = splitToParts($number);
	
	if ($number == 0) {
		echo "На вашем счету ноль рублей";
		exit;
	} 
	
	$numberOfWord = -1;
	$arrayOfWords = array();
	
	foreach($level as $key => $discharge) {
		
		if ($discharge == 0 && $key == 2) {
			$numberOfWord++;
			$arrayOfWords[$numberOfWord] = "рублей";
			continue;
		} elseif ($discharge == 0) {
			continue;
		}
		
        $endingNumber = $discharge;       
		
        if (($discharge >= 100) && ($discharge <= 999)) {
			
			$numberOfWord++;
			$numberInArray = floor($discharge / 100) * 100;
			$arrayOfWords[$numberOfWord] = $spelling[$numberInArray];
			$discharge = $discharge % 100;
		}
 
		if (($discharge >= 10) && ($discharge <= 19)) {
			$numberOfWord++;
			$numberInArray = $discharge;
			$arrayOfWords[$numberOfWord] = $spelling[$numberInArray];
 
		} elseif ($discharge != 0) {
			
		    if ($discharge <= 9 || $discharge % 10 == 0) {
				$numberOfWord++;
			    $arrayOfWords[$numberOfWord] = writeThousand($key, $discharge, $spelling);
		    } else {
				
				$numberOfWord++;
			    $numberInArray = floor($discharge / 10) * 10;
				$arrayOfWords[$numberOfWord] = $spelling[$numberInArray];
				$discharge = $discharge % 10;
				$numberOfWord++;
                $arrayOfWords[$numberOfWord] = writeThousand($key, $discharge, $spelling);
		    }
				

		} elseif ($key == 2 && $discharge == 0 && $number != 0) {
			$numberOfWord++;
			$arrayOfWords[$numberOfWord] = "рублей";
		}
		
		$numberOfWord++;
		$word = inclineWord($endingNumber, $end[$key]);
	    $arrayOfWords[$numberOfWord] = $word;
    }
	
	$text = implode(" ", $arrayOfWords);
	return $text;
}

$number = mt_rand(0, 999999999);
$number = smallNumberToarrayOfWords($number, $end);
echo "На вашем счету {$number}\n";