<?php
error_reporting(-1);
mb_internal_encoding('utf-8');
 
 
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord($number, $wordsArray) {
	$word1 = $wordsArray[1];
	$word2 = $wordsArray[2];
	$word5 = $wordsArray[5];
    $last = $number%10;
	$lastTwo = $number%100;
	if ($lastTwo > 10 and $lastTwo <20 || $last == 0 || $last > 4) {
		return $word5;
	} elseif ($last > 1 and $last < 5) {
		return $word2;
	} elseif ($last == 1) {
		return $word1;
	}
}
 
/* 
    Преобразует числа от 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   =>  'две'
    );
	
	if ($isFemale == 1) {
		$spelling[1] = $femaleSpelling[1];
		$spelling[2] = $femaleSpelling[2]; 
	}
	
	$numberArray = array();
	
	$tens = 0;
    $one = $number % 1000;
	$two = $number % 100;
	$three = $number % 10;
	$numberCount = 0;
	if ($two >10 and $two <20) {
		$tens = 1;
	}
	$oneNew = $one - $two;
	$twoNew = $two - $three;
	if ($number >= 100) {
		$numberCount = 2;
		$numberArray[0] = $spelling[$oneNew];
		if ($twoNew != 0) {
			$numberArray[1] = $spelling[$twoNew];
		}
		$numberArray[2] = $spelling[$three];
	} elseif ($number <100 and $number >= 10) {
		$numberCount = 1;
		$numberArray[0] = $spelling[$twoNew];
		$numberArray[1] = $spelling[$three];
	} elseif ($number <10) {
		$numberArray[0] = $spelling[$three];
	}
	if ($tens == 1 || $three == 0) {
		unset($numberArray[$numberCount]);
		$numberArray[$numberCount - 1] = $spelling[$two];	
	}
	$result = implode(' ', $numberArray);
	return $result;
}
 
function numberToText($number) {
	$isFemale = 0;
	$rubles = array(1 => 'рубль', 2 => 'рубля', 5 => 'рублей');
	$bigNumbers = array(
					2 => array( 
								1 => 'тысяча',
								2 => 'тысячи',
								5 => 'тысяч'
								),
					3 => array( 
								1 => 'миллион',
								2 => 'миллиона',
								5 => 'миллионов'
								)
						);
	$resultArray = array();
	$numbersInNumber = ceil(mb_strlen($number)/3);
	for ($i=1; $i<=$numbersInNumber; $i++) {
		if ($i == 1){
			$numberForWork = $number%1000;
			$wordAfterNumber = inclineWord($numberForWork, $rubles);
		} else {
			if ($i == 2) {
				$isFemale = 1;
			} else {
				$isFemale = 0;
			}
			$numberForWork = ($number%(pow(1000, $i))-$number%(pow(1000, $i-1)))/(pow(1000, $i-1));
			$wordAfterNumber = inclineWord($numberForWork, $bigNumbers[$i]);
		}
		$wordNumber = smallNumberToText($numberForWork, $isFemale);
		$smallNumberResult = $wordNumber . ' ' . $wordAfterNumber;
		$resultArray[$i] = $smallNumberResult;
	}
	krsort ($resultArray);
	$result = implode(' ', $resultArray);
	return $result;
}
 
/* Вызовем функцию несколько раз */
$amount1 = mt_rand(1,99999999);
$text1 = numberToText($amount1);
 
echo "На вашем счету {$text1}<br>";

$amount2 = mt_rand(1,99999999);
$text2 = numberToText($amount2);
 
echo "На вашем счету {$text2}<br>";
 
$amount3 = mt_rand(1,99999999);  
$text3 = numberToText($amount3);
 
echo "На вашем счету {$text3}<br>";
 
$amount4 = mt_rand(1,99999999);
$text4 = numberToText($amount4);
 
echo "На вашем счету {$text4}<br>";

?>