<?php
 
error_reporting(-1);
mb_internal_encoding('utf-8');
 
 
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord($discharge, $key) {
	
    $end = array(
	    0 => array(
		    0 => "миллион",
			1 => "миллиона",
			2 => "миллионов"
		),
		1 => array(
		    0 => "тысяча",
			1 => "тысячи",
			2 => "тысяч"
		),
		2 => array(
		    0 => "рубль",
			1 => "рубля",
			2 => "рублей"
		)
    );
	
	$word = $discharge % 10;

    if ($word == 1){
        $word = $end[$key][0];
    } elseif (($word >= 2) && ($word <= 4)) {
	    $word = $end[$key][1];
    } else {
	    $word = $end[$key][2];
    }
	
	return($word);
}
 
//переводит числовое число в текстовое 
function smallNumberToText($number) {
 
    $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 =>  'девятьсот',
    );
 
    $score = mb_strlen($number);
  
	$hundred = mb_substr($number, -3);

    //разбивает число на миллионы, тысяча и сотни    
	if ($score >= 6) {
        $thousand = mb_substr($number, -6, 3);
    } elseif ($score == 5) {
	    $thousand = mb_substr($number, -5, 2);
    } elseif ($score == 4) {
	    $thousand = mb_substr($numver, -4, 1);
    }

    if ($score == 8) {
	    $million = mb_substr($number, 0, 2);
    } elseif ($score == 7) {
	    $million = mb_substr($number, 1, 1);
    }
	
	$level = array(
	    0 => $million,
		1 => $thousand,
		2 => $hundred
	);

	$number = "";
    
	foreach($level as $key => $discharge) {
	
        if ($discharge > 0) {

		    if (mb_strlen($discharge) == 3) {
	            $numberDigits = 1000;
	        } elseif (mb_strlen($discharge) == 2) {
	            $numberDigits = 100;
	        } elseif (mb_strlen($discharge) == 1) {
	            $numberDigits = 10;
	        }
			
			for ($i = 0; $i < mb_strlen($discharge); $i++) {
				
			    $numberDigits = $numberDigits / 10;
				$words = inclineWord($discharge, $key);
			    $number = $number.' '.$spelling[mb_substr($discharge, $i, 1) * $numberDigits];
		    }
		$number = $number.' '.$words;
		}
    }
	
	$regexp = array(
	    0 => '/ десять один/',
		1 => '/ десять два/',
		2 => '/ десять три/',
		3 => '/ десять четыре/',
		4 => '/ десять пять/',
		5 => '/ десять шесть/',
		6 => '/ десять семь/',
		7 => '/ десять восемь/',
		8 => '/ десять девять/'
	);	

	$replacements = array_slice($spelling, 11, 9);
	$number = preg_replace($regexp, $replacements, $number);
	
	$regexp = '/[ ]ноль[ ]/';
	$number = preg_replace($regexp, ' ', $number);
    
	$regexp = array ('/один тысяча/', '/два тысячи/');
	$replacements = array ('одна тысяча', 'две тысячи');
	$number = preg_replace($regexp, $replacements, $number);
	
	return($number);  
}

$number = 1000000;
$number = smallNumberToText($number);
echo "На вашем счету {$number}\n";