За последние 24 часа нас посетили 126267 программистов и 2438 роботов. Сейчас ищет 1461 программист ...

Из числа в слово...

Тема в разделе "PHP для новичков", создана пользователем EvelRus, 9 сен 2008.

  1. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    хотя возможно и не с того...
    портировано "дословно" :)
    Код (Text):
    1. <?
    2.     $state=array('mlrd','mil','th','dum1_','dum2_');
    3.     $names=array('миллиард','миллион','тысяч');
    4.     $digm=array('','один','два','три','четыре','пять','шесть','семь','восемь','девять','десять','одинадцать','двенадцать','тринадцать','четырнадцать','пятьнадцать','шестьнадцать','семьнадцать','восемьнадцать','девятьнадцать');
    5.     $digj=array('','одна','две','три','четыре','пять','шесть','семь','восемь','девять','десять','одинадцать','двенадцать','тринадцать','четырнадцать','пятьнадцать','шестьнадцать','семьнадцать','восемьнадцать','девятьнадцать');
    6.     $dig10=array('','','двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят','восемьдесят','девяносто');
    7.     $dig100=array('','сто','двести','тристо','четыреста','пятьсот','шестьсот','семьсот','восемьсот','девятьсот');
    8.    
    9.     $ends=array(
    10.         array('','а','ов'),
    11.         array('','а','ов'),
    12.         array('а','и',''),
    13.     );
    14.  
    15. function str_to_int($s,$pos,$count){
    16.     return intval(substr($s,($pos-1),$count));
    17. }
    18.  
    19. function num3totext($s,$st) {
    20.     global $state;
    21.     global $names;
    22.     global $digm;
    23.     global $digj;
    24.     global $dig10;
    25.     global $dig100;
    26.     global $ends;
    27.  
    28.     $result='';
    29.     if($s=="0"){
    30.         return $result;
    31.     }
    32.     $result.=$dig100[str_to_int($s,1,1)];
    33.     if(str_to_int($s,2,2)<="19"){
    34.         if($st=='th'){
    35.             $result.=' '.$digj[str_to_int($s,2,2)];
    36.         }else{
    37.             $result.=' '.$digm[str_to_int($s,2,2)];
    38.         }
    39.     }else{
    40.         $result.=' '.$dig10[str_to_int($s,2,1)];
    41.         if($st=='th'){
    42.             $result.=' '.$digj[str_to_int($s,3,1)];
    43.         }else{
    44.             $result.=' '.$digm[str_to_int($s,3,1)];
    45.         }
    46.     }
    47.     $indexes=-1;
    48.     if($st=='mlrd'){
    49.         $indexes=0;
    50.     }elseif($st=='mil'){
    51.         $indexes=1;
    52.     }elseif($st=='th'){
    53.         $indexes=2;
    54.     }
    55.     if($indexes>=0){
    56.         if(str_to_int($s,2,1)=="0"){
    57.             $stm=str_to_int($s,3,1);
    58.             if(in_array($stm,array('1'))){
    59.                 $result.=' '.$names[$indexes].$ends[$indexes][0];
    60.             }elseif(in_array($stm,array('2','3','4'))){
    61.                 $result.=' '.$names[$indexes].$ends[$indexes][1];
    62.             }elseif(in_array($stm,array('0','5','6','7','8','9'))){
    63.                 $result.=' '.$names[$indexes].$ends[$indexes][2];
    64.             }          
    65.         }else{
    66.  
    67.             if(str_to_int($s,2,1)=="1"){
    68.                 $result.=' '.$names[$indexes].$ends[$indexes][2];
    69.             }else{
    70.                 $stm=str_to_int($s,3,1);
    71.                 if(in_array($stm,array('1'))){
    72.                     $result.=' '.$names[$indexes].$ends[$indexes][0];
    73.                 }elseif(in_array($stm,array('2','3','4'))){
    74.                     $result.=' '.$names[$indexes].$ends[$indexes][1];
    75.                 }elseif(in_array($stm,array('0','5','6','7','8','9'))){
    76.                     $result.=' '.$names[$indexes].$ends[$indexes][2];
    77.                 }
    78.             }
    79.         }
    80.     }
    81.     return $result;
    82. }
    83.  
    84. function repeat_until($result,$n,$st,$s){
    85.     global $state;
    86.     // :)))))
    87.  
    88.     $result=' '.num3totext(substr($s,($n-1),3),$state[$st]);
    89.  
    90.     $st++;
    91.     $n=$n+3;
    92.     if($n>12){
    93.         return $result;
    94.     }else{
    95.         return $result.repeat_until($result,$n,$st,$s);
    96.     }
    97.  
    98. }
    99.  
    100. function num2text($i){
    101.  
    102.     $str=str_repeat('0',12-strlen($i)).$i;
    103.     return trim(repeat_until('',1,0,$str));
    104.  
    105. }
    106.  
    107.     $test=8125481458;
    108.  
    109.     echo num2text($test);
    110.  
    111.  
    112. ?>
     
  2. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    А нафига на ВБ, если уже тут 2 раза выложили.......??
     
  3. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    там есть небольшие баги, а тут все ок
     
  4. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Это если не считать того, что код из ВБ нужно переносить на php)))))))))))))
     
  5. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    antonn, СУПЕР!!!! Думаю стоит перенести в готовые решения :)