Пример кода, который возвращает сумму на кириллице.
Php функция для вывода суммы текстом на русском
12.06.2018
price_text.php (Download)
<?php class soPriceText { /** * Возвращает сумму прописью */ public function num2str($num,$translite=null) { $defaultTranslite = array( 'null' => 'ноль', 'a1' => array(1=>'один',2=>'два',3=>'три',4=>'четыре',5=>'пять',6=>'шесть',7=>'семь',8=>'восемь',9=>'девять'), 'a2' => array(1=>'одна',2=>'две',3=>'три',4=>'четыре',5=>'пять',6=>'шесть',7=>'семь',8=>'восемь',9=>'девять'), 'a10' => array(0=>'десять',1=>'одиннадцать',2=>'двенадцать',3=>'тринадцать',4=>'четырнадцать',5=>'пятнадцать',6=>'шестнадцать',7=>'семнадцать',8=>'восемнадцать',9=>'девятнадцать'), 'a20' => array(2=>'двадцать',3=>'тридцать',4=>'сорок',5=>'пятьдесят',6=>'шестьдесят',7=>'семьдесят',8=>'восемьдесят',9=>'девяносто'), 'a100' => array(1=>'сто',2=>'двести',3=>'триста',4=>'четыреста',5=>'пятьсот',6=>'шестьсот',7=>'семьсот',8=>'восемьсот',9=>'девятьсот'), 'uc' => array('копейка', 'копейки', 'копеек'), 'ur' => array('рубль', 'рубля', 'рублей'), 'u3' => array('тысяча', 'тысячи', 'тысяч'), 'u2' => array('миллион', 'миллиона', 'миллионов'), 'u1' => array('миллиард', 'миллиарда', 'миллиардов'), ); $translite = is_null($translite) ? $defaultTranslite : $translite; list($rub,$kop) = explode('.',sprintf("%015.2f", floatval($num))); $out = array(); if (intval($rub) > 0) { // Разбиваем число по три символа $cRub = str_split($rub,3); foreach($cRub as $uk=>$v) { if (!intval($v)) continue; list($i1,$i2,$i3) = array_map('intval',str_split($v,1)); $out[] = isset($translite['a100'][$i1]) ? $translite['a100'][$i1] : ''; // 1xx-9xx $ax = ($uk+1 == 3) ? 'a2' : 'a1'; if ($i2 > 1) @$out[]= $translite['a20'][$i2].' '.$translite[$ax][$i3]; // 20-99 else $out[]= $i2 > 0 ? $translite['a10'][$i3] : $translite[$ax][$i3]; // 10-19 | 1-9 if (count($cRub) > $uk+1) { $uName = $translite['u'.($uk+1)]; $out[]= $this->_morph($v,$uName); } } } else { $out[] = $translite['null']; } // Дописываем название "рубли" $out[] = $this->_morph(intval($rub),$translite['ur']); // rub // Дописываем название "копейка" $out[] = $kop.' '.$this->_morph($kop,$translite['uc']); // kop // Объединяем маcсив в строку $str = join(' ',$out); // Удаляем лишние пробелы и возвращаем результат return trim(preg_replace('/ {2,}/', ' ', $str)); } /** * Склоняем словоформу */ private function _morph($number, $titles) { $cases = array (2, 0, 1, 1, 1, 2); return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ]; } } $oPriceText = new soPriceText(); echo $oPriceText->num2str(29650);