    <?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, $word3) {
        if ($number == 1) {
            return $word1;
        } elseif ($number > 1 && $number < 5)
        {
            return $word2;
        } else {
            return $word3;
        }
    }
     
    /* 
        Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю, 
        если мы считаем число для мужского рода (один рубль), 
        и 1 — для женского (одна тысяча) 
    */
    function smallNumberToText($number, $isFemale) {
     
        $text = "";
     
        $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   =>  'две'
        );
     
        while ($number != 0) {
        	if ($isFemale == 1 && array_key_exists($number, $femaleSpelling)) {
        		$text .= "{$femaleSpelling[$number]} ";
        		break;
        	} elseif (array_key_exists($number, $spelling)) {
        		$text .= "{$spelling[$number]} ";
        		break;
        	}
     
        	if ($number > 99) {
        		$temp = $number - ($number % 100);
        		$number -= $temp;
        		$text .= "{$spelling[$temp]} ";
        	} else {
        		$temp = $number - ($number % 10);
        		$number -= $temp;
        		$text .= "{$spelling[$temp]} ";
        	}
        }
     
        return $text;
    }
     
    function getLastDigit($number) {
    	
    	if ($number > 99) {
    		$number %= 100;
    	}
    	
    	if ($number > 19) {
    		$number %= 10;
    	}
    	
    	
    	return $number;
    }
     
    function getSmallerNumber($number) {
        if ($number > 999999) {
            $number /= 1000000;
        } else {
            $number /= 1000;
        }
     
        return intval($number);
    }
     
    function numberToText($number) {
     
        $text = "";
     
        if ($number == 0) {
        	return "ноль (0) рублей";
        }
     
        $originalNumber = $number;
     
        while ($number != 0)
        {
            $smallerNumber = getSmallerNumber($number);
            if ($number > 999999) {
        	    $text .= smallNumberToText($smallerNumber, 0) . inclineWord(getLastDigit($smallerNumber), "миллион ", "миллиона ", "миллионов ");
        	    $number -= $smallerNumber * 1000000;
            } elseif ($number > 999) {
                $text .= smallNumberToText($smallerNumber, 1) . inclineWord(getLastDigit($smallerNumber), "тысяча ", "тысячи ", "тысяч ");
                $number -= $smallerNumber * 1000;
            } else {
                $text .= smallNumberToText($number, 0) . "({$originalNumber}) " . inclineWord(getLastDigit($number), "рубль", "рубля", "рублей");
                break;
            }
        }
     
        return $text;
    }
    
echo numberToText(11340);