Created
February 10, 2019 09:14
-
-
Save AlekVolsk/db83c63e7dacf567bd8715360c2e8b87 to your computer and use it in GitHub Desktop.
Сумма прописью
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function numStr($num) | |
{ | |
$m = [ | |
['ноль'], | |
['-','один','два','три','четыре','пять','шесть','семь','восемь','девять'], | |
['десять','одиннадцать','двенадцать','тринадцать','четырнадцать','пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать'], | |
['-','-','двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят','восемьдесят','девяносто'], | |
['-','сто','двести','триста','четыреста','пятьсот','шестьсот','семьсот','восемьсот','девятьсот'], | |
['-','одна','две'] | |
]; | |
$r = [ | |
['...ллион','','а','ов'], | |
['тысяч','а','и',''], | |
['миллион','','а','ов'], | |
['миллиард','','а','ов'], | |
['триллион','','а','ов'], | |
['квадриллион','','а','ов'], | |
['квинтиллион','','а','ов'] | |
]; | |
if ($num == 0) | |
return $m[0][0]; | |
$o=[]; | |
foreach(array_reverse(str_split(str_pad($num,ceil(strlen($num)/3)*3,'0',STR_PAD_LEFT),3))as$k=>$p) | |
{ | |
$o[$k]=[]; | |
foreach ($n = str_split($p) as $kk => $pp) | |
if (!$pp) | |
continue; | |
else | |
switch ($kk) | |
{ | |
case 0: | |
$o[$k][] = $m[4][$pp]; | |
break; | |
case 1: | |
if ($pp == 1) | |
{ | |
$o[$k][] = $m[2][$n[2]]; | |
break 2; | |
} | |
else | |
{ | |
$o[$k][] = $m[3][$pp]; | |
break; | |
} | |
case 2: | |
if (($k == 1) && ($pp <= 2)) | |
{ | |
$o[$k][] = $m[5][$pp]; | |
} | |
else | |
{ | |
$o[$k][] = $m[1][$pp]; | |
} | |
break; | |
} | |
$p *= 1; | |
if (!$r[$k]) | |
$r[$k] = reset($r); | |
if ($p && $k) | |
switch (true) | |
{ | |
case preg_match("/^[1]$|^\\d*[0,2-9][1]$/", $p): | |
$o[$k][] = $r[$k][0] . $r[$k][1]; | |
break; | |
case preg_match("/^[2-4]$|\\d*[0,2-9][2-4]$/", $p): | |
$o[$k][] = $r[$k][0] . $r[$k][2]; | |
break; | |
default: | |
$o[$k][] = $r[$k][0] . $r[$k][3]; | |
break; | |
} | |
$o[$k] = implode(' ', $o[$k]); | |
} | |
return implode(' ', array_reverse($o)); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment