Advertisement
Guest User

Untitled

a guest
Sep 24th, 2018
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.57 KB | None | 0 0
  1. <?php
  2.  
  3.  
  4.  
  5. // Staring straight up into the sky ... oh my my
  6. error_reporting(-1);
  7. mb_internal_encoding('utf-8');
  8.  
  9. function numberToText($number,$arr=[]) {
  10. define('AMOUNT','(' . $number . ')');
  11. $opNumber=$number % 1000;
  12. $spelling = array(
  13. 0 => 'ноль', 10 => 'десять', 100 => 'сто',
  14. 1 => 'один', 11 => 'одиннадцать', 20 => 'двадцать', 200 => 'двести',
  15. 2 => 'два', 12 => 'двенадцать', 30 => 'тридцать', 300 => 'триста',
  16. 3 => 'три', 13 => 'тринадцать', 40 => 'сорок', 400 => 'четыреста',
  17. 4 => 'четыре', 14 => 'четырнадцать', 50 => 'пятьдесят', 500 => 'пятьсот',
  18. 5 => 'пять', 15 => 'пятнадцать', 60 => 'шестьдесят', 600 => 'шестьсот',
  19. 6 => 'шесть', 16 => 'шестнадцать', 70 => 'семьдесят', 700 => 'семьсот',
  20. 7 => 'семь', 17 => 'семнадцать', 80 => 'восемьдесят', 800 => 'восемьсот',
  21. 8 => 'восемь', 18 => 'восемнадцать', 90 => 'девяносто', 900 => 'девятьсот',
  22. 9 => 'девять', 19 => 'девятнадцать'
  23. );
  24.  
  25. if ($opNumber/100>=0) {
  26. $firstDigit=floor($opNumber/100); $opNumber-=$firstDigit*100; $firstDigit=$spelling[$firstDigit*100];
  27. }
  28.  
  29. if ($opNumber<=19) {
  30. $secondDigit=0;$lastDigit=$spelling[$opNumber];
  31. } else {
  32. $secondDigit=floor($opNumber/10); $opNumber-=$secondDigit*10;$secondDigit=$spelling[$secondDigit*10];
  33. }
  34.  
  35. $lastDigit=$spelling[$opNumber];
  36. $x=($firstDigit&&$firstDigit!='ноль'?"$firstDigit ":'') . ($secondDigit&&$secondDigit!='ноль'?"$secondDigit ":'') . ($lastDigit&&$lastDigit!='ноль'?"$lastDigit":'');
  37.  
  38. array_push($arr,$x);
  39.  
  40. //recursion is passing into arguments a number, decremented each loop by 3 digits
  41. //the idea behind recursion will be like this
  42. //f(n) code n%1000 //work on last 3 digits
  43. //if n/1000>1 return function (~~n/1000)
  44.  
  45. if ($number / 1000 >=1) {
  46. return numberToText(floor($number / 1000),$arr);
  47. }
  48.  
  49.  
  50.  
  51. $preString="" . ($arr[2]?
  52. preg_match('/(два|три|четыре)$/u',$arr[2])?"{$arr[2]} миллиона":(preg_match('/(один)$/u',$arr[2])?"{$arr[2]} миллион":"{$arr[2]} миллионов")
  53. :'') . ($arr[1]?
  54. preg_match('/(два|три|четыре)$/u',$arr[1])?' ' . $arr[1] . ' тысячи':(preg_match('/(одна)$/u',$arr[1])?" {$arr[1]} тысяча":" {$arr[1]} тысяч")
  55. :'') . ($arr[0]?
  56. preg_match('/(два|три|четыре)$/u',$arr[0])?' ' . $arr[0] . ' ' . AMOUNT . ' рубля':(preg_match('/(один)$/u',$arr[0])?" {$arr[0]}" . ' ' . AMOUNT. ' рубль':" {$arr[0]}" . ' ' . AMOUNT . ' рублей')
  57. :' '. AMOUNT . ' рублей');
  58. $preString=preg_replace('/два тысячи/u','две тысячи',$preString);
  59.  
  60.  
  61. return $preString;
  62. }
  63.  
  64.  
  65. $amount1 = mt_rand(1,99999999);
  66. $text1 = numberToText($amount1);
  67.  
  68.  
  69. echo "На вашем счету {$text1}\n";
  70. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement