Пример кода, который возвращает сумму на кириллице.
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);