Сто сорок четыре

Число прописью на PHP

Полностью готовый и рабочий скрипт PHP Цифры прописью:

function num_propis($num){ // $num — цело число # Все варианты написания чисел прописью от 0 до 999 скомпонуем в один небольшой массив $m=array( array(‘ноль’), array(‘-‘,’один’,’два’,’три’,’четыре’,’пять’,’шесть’,’семь’,’восемь’,’девять’), array(‘десять’,’одиннадцать’,’двенадцать’,’тринадцать’,’четырнадцать’,’пятнадцать’,’шестнадцать’,’семнадцать’,’восемнадцать’,’девятнадцать’), array(‘-‘,’-‘,’двадцать’,’тридцать’,’сорок’,’пятьдесят’,’шестьдесят’,’семьдесят’,’восемьдесят’,’девяносто’), array(‘-‘,’сто’,’двести’,’триста’,’четыреста’,’пятьсот’,’шестьсот’,’семьсот’,’восемьсот’,’девятьсот’), array(‘-‘,’одна’,’две’) ); # Все варианты написания разрядов прописью скомпануем в один небольшой массив $r=array( array(‘…ллион’,»,’а’,’ов’), // используется для всех неизвестно больших разрядов array(‘тысяч’,’а’,’и’,»), array(‘миллион’,»,’а’,’ов’), array(‘миллиард’,»,’а’,’ов’), array(‘триллион’,»,’а’,’ов’), array(‘квадриллион’,»,’а’,’ов’), array(‘квинтиллион’,»,’а’,’ов’) // ,array(… список можно продолжить ); if($num==0)return$m; # Если число ноль, сразу сообщить об этом и выйти $o=array(); # Сюда записываем все получаемые результаты преобразования # Разложим исходное число на несколько трехзначных чисел и каждое полученное такое число обработаем отдельно foreach(array_reverse(str_split(str_pad($num,ceil(strlen($num)/3)*3,’0′,STR_PAD_LEFT),3))as$k=>$p){ $o=array(); # Алгоритм, преобразующий трехзначное число в строку прописью foreach($n=str_split($p)as$kk=>$pp) if(!$pp)continue;else switch($kk){ case 0:$o=$m;break; case 1:if($pp==1){$o=$m];break 2;}else$o=$m;break; case 2:if(($k==1)&&($pp<=2))$o=$m;else$o=$m;break; }$p*=1;if(!$r)$r=reset($r); # Алгоритм, добавляющий разряд, учитывающий окончание руского языка if($p&&$k)switch(true){ case preg_match(«/^$|^\\d*$/»,$p):$o=$r.$r;break; case preg_match(«/^$|\\d*$/»,$p):$o=$r.$r;break; default:$o=$r.$r;break; }$o=implode(‘ ‘,$o); } return implode(‘ ‘,array_reverse($o)); }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *