<?php

error_reporting(-1);
mb_internal_encoding('utf-8');


$spelling= [0   =>  'ноль',                                     10  =>  'десять',       100 =>  'сто',
    1   =>  'один',         11  =>  'одиннадцать',      20  =>  'двадцать',     200 =>  'двести',
    2   =>  'два',          12  =>  'двенадцать',       30  =>  'тридцать',     300 =>  'триста',
    3   =>  'три',          13  =>  'тринадцать',       40  =>  'сорок',        400 =>  'четыреста',
    4   =>  'четыре',       14  =>  'четырнадцать',     50  =>  'пятьдесят',    500 =>  'пятьсот',
    5   =>  'пять',         15  =>  'пятнадцать',       60  =>  'шестьдесят',   600 =>  'шестьсот',
    6   =>  'шесть',        16  =>  'шестнадцать',      70  =>  'семьдесят',    700 =>  'семьсот',
    7   =>  'семь',         17  =>  'семнадцать',       80  =>  'восемьдесят',   800 =>  'восемьсот',
    8   =>  'восемь',       18  =>  'восемнадцать',     90  =>  'девяносто',     900 =>  'девятьсот',
    9   =>  'девять',       19  =>  'девятнадцать'    ];
$spellingForFemaleGenus= [1=>'одна', 2=>'две'];

function n_to_groups($n)
{
    $partsArray = [];
    for ($i = $n; $i > 0;) {
        $part = $i % 1000;
        $partsArray[] = $part;
        $i = floor($i / 1000);
    }
    return $partsArray;
}

function small_number_to_text ($n, $gen){
    global $spelling;
    global $spellingForFemaleGenus;
    $i=floor($n/100);
    if ($i!=0) {
       $i = $i*100;
        $iSpelling = $spelling[$i];
    }
       else {
             $iSpelling = null;
      }
    if (($n%100)>19) {
         $j = 10 * (floor(( $n%100) / 10));
       $jSpelling = $spelling[$j];
    }
      elseif (($n%100)<20 and ($n%100)>=10){
           $j = $n % 100;
           $jSpelling = $spelling[$j];
      }
    elseif (($n%100)<10){
         $jSpelling=null;
    }
     if ($n%100>=10 and $n%100<=19){
        $k=null;
    }
      else {
      $k = $n % 10;
     }
    if ($k>0){
      $kSpelling=$spelling[$k];
     }
    if (($k==1 and $gen==1) or ($k==2 and $gen==1)){
       $kSpelling=$spellingForFemaleGenus[$k];
    }
      elseif ($k==0){
       $kSpelling=null;
    }
     $smallNInText='';
    if ($iSpelling){
        $smallNInText=$smallNInText . $iSpelling . ' ';
     }
    if ($jSpelling){
        $smallNInText=$smallNInText . $jSpelling . ' ';
     }
    if ($kSpelling){
        $smallNInText=$smallNInText . $kSpelling . ' ';
     }
    return $smallNInText;
}

function word_form ($n,$form1,$form2,$form3){
   $i=$n%10;
   $j=$n%100;
           if ($n = false) {
               $wordForm = null;
           } elseif ($i == 1) {
               $wordForm = $form1;
           } elseif ($i >= 2 and $i <= 4) {
               $wordForm = $form2;
           } elseif ($i == 0 or $i >= 5) {
               $wordForm = $form3;
           }
               if ($j>=10 and $j<=20) {
                   $wordForm = $form3;
       }
    return $wordForm;
}

function number_to_text ($n){
    $partsArray= n_to_groups ($n);
    if ($partsArray[2]) {
        $millionsToText = small_number_to_text($partsArray[2], 0) . word_form($partsArray[2], "миллион", "миллиона", "миллионов");
    }
        elseif ($partsArray[2]=false){
        $millionsToText=null;
    }

    if ($partsArray[1]) {
        $thousandToText= small_number_to_text($partsArray[1], 1) . word_form($partsArray[1], "тысяча","тысячи", "тысяч");
    }
    elseif ($partsArray[1]=false){
        $thousandToText=null;
    }
    if ($partsArray[0]) {
        $roublesToText= small_number_to_text($partsArray[0], 0) . word_form($partsArray[0], "рубль", "рубля", "рублей");
    }
    elseif ($partsArray[0]=false) {
        $roublesToText= word_form(0, "рубль", "рубля", "рублей");
    }
    elseif ($partsArray[0]==0) {
        $roublesToText= "ноль рублей";
    }
    $numberToText= '';
    if ($millionsToText){
        $numberToText=$numberToText . ' ' . $millionsToText;
    }
    if ($thousandToText){
        $numberToText=$numberToText . ' ' . $thousandToText;
    }
    if ($roublesToText){
        $numberToText=$numberToText . ' ' . $roublesToText;
    }
    return $numberToText;
}

$test1= number_to_text(mt_rand(0,999999999));
echo "На Вашем счету$test1\n";
$test2= number_to_text(mt_rand(0,999999999));
echo "На Вашем счету$test2\n";
$test3= number_to_text(mt_rand(0,999999999));
echo "На Вашем счету$test3\n";