<?php

error_reporting(-1);
mb_internal_encoding('UTF-8');

//$number = 301;
    $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  =>  'девятнадцать'    
    );
    $roubles = array(
    	'рубль' => array(1),
    	'рубля' => array(2, 3, 4),
    	'рублей' => array(0, 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)
    	);
function findMatches($num, $spelling) {
    $result = 0;
    foreach ($spelling as $keys => $values) {
        if ($num == $keys) {
	        $result = $values;
	        break;
        } 
    } return $result;
}
function findRoublesForm($num, $roubles) {
	$rouble = 0;
    foreach ($roubles as $form => $numerals) {
	    foreach ($numerals as $s => $numeral) {
	        if ($num == $numeral) {
		    $rouble = $form;
		    }
	    }
    } return $rouble;
}	
function smallNumberToText($number, $spelling, $roubles) {
$i = 0;
$o = 0;
$text = strval($number);
$countLetters = mb_strlen($text);
foreach ($spelling as $keys => $values) {
    if ($number == $keys) {
	    $splash = $values;
	    $o++;
	    break;
    } 
}
$num = $number;
$rouble = findRoublesForm($num, $roubles);
if ($o > 0) {
            $numberInWords = $splash.' '.$rouble;
} else {
        if ($countLetters == 3) {
        $firstNumberOfTheHundred = mb_substr($text, 0, 1);
        $findHundredEqual = (int)$firstNumberOfTheHundred * 100;
            if ($findHundredEqual == 0) {
            } else {
                    $num = $findHundredEqual;
                    $hundred = findMatches($num, $spelling);
                    $rouble = findRoublesForm($num, $roubles);
              }
        $findLastTwoNumerals = mb_substr($text, 1, 2);
        $lastTwoNumerals = (int)$findLastTwoNumerals;
        foreach ($spelling as $keys => $values) {
            if ($lastTwoNumerals == $keys) {
            	$ten = $values;
	            $i++;
	            break;
            } 
        }
        $num = $lastTwoNumerals;
        $rouble = findRoublesForm($num, $roubles);
        if ($i > 0) {
            $numberInWords = $hundred.' '.$ten.' '.$rouble;
        } else {
        $firstNumberOfTheTen = mb_substr($text, 1, 1);
        $findTenEqual = (int)$firstNumberOfTheTen * 10;
        if ($findTenEqual == 0) {
        } else {
        	$num = $findTenEqual;
        	$ten = findMatches($num, $spelling);
            
          }
        $lastOneNumeral = mb_substr($text, 2, 1);
        $findLastOneNumeral = (int)$lastOneNumeral;
        $num = $findLastOneNumeral;
        $one = findMatches($num, $spelling);
        $rouble = findRoublesForm($num, $roubles);
        $numberInWords = $hundred.' '.$ten.' '.$one.' '.$rouble;
         }
        }
        
        if ($countLetters == 2) {
        	$i = 0;
        	    $lastTwoNumerals = mb_substr($text, 0, 2);
                $twoNumerals = (int)$lastTwoNumerals;
                foreach ($spelling as $keys => $values) {
                    if ($twoNumerals == $keys) {
	                $ten = $values;
	                $i++;
	                break;
                    } 
                }
                $num = $twoNumerals;
                $rouble = findRoublesForm($num, $roubles);
        if ($i > 0) {
            $numberInWords = $hundred.' '.$ten.' '.$rouble; 
        } else {
        $firstNumeralOfTheTen = mb_substr($text, 0, 1);
        $tenEqual = (int)$firstNumeralOfTheTen * 10; 
        if ($tenEqual == 0) {
        } else {
        	$num = $tenEqual;
        	$ten = findMatches($num, $spelling);
          }
        $lastNumeral = mb_substr($text, 1, 1);
        $findLastNumeral = (int)$lastNumeral;
        $num = $findLastNumeral;
        $one = findMatches($num, $spelling);
        $rouble = findRoublesForm($num, $roubles);
        $numberInWords = $ten.' '.$one.' '.$rouble;
          }
        }
    }
    return $numberInWords;
}

$number = mt_rand(1,999);
$cheking = smallNumberToText($number, $spelling, $roubles);
echo "\"{$number}\" - это \"{$cheking}\".";

?>