Spell a number in russian

<?php
 
function ru_number($num, $gender='m', $none='ноль') {
	if (!$num) return $none;
	$gender = strtolower($gender);
	static $names = array(
		'1' => array('m'=>"один",'f'=>"одна",'n'=>"одно"),
		'2' => array('m'=>"два",'f'=>"две",'n'=>"два"),
		'3' => array("три","четыре","пять","шесть","семь","восемь","девять"),
		'10' => array("десять","одинадцать", "двенадцать", "тринадцать", "четырнадцать",
		"пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"),
		'20' => array("двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят",
		"восемьдесят", "девяносто"),
		'100' => array("сто", "двести", "триста", "четыреста", "пятьсот","шестьсот","семьсот",
		"восемьсот", "девятьсот")
	);
 
	$l1 = substr($num, -1);
 
	if (($mils = substr($num, 0, strlen($num) - 6)))
		$r = ru_number($mils, 'm', $none) . " " .
			ru_noun_fcount($mils, "миллион", "миллиона", "миллионов") . " ";
	$num = "000".$num;
	if (($thousands = round(substr($num, -6, 3))))
		$r .= ru_number($thousands, 'f', $none) . " " .
			ru_noun_fcount($thousands, "тысяча", "тысячи", "тысяч") . " ";
	if ( ($l3 = substr($num, -3, 1)) >= 1 && $l3 <= 9) $r .= $names[100][$l3-1]." ";//"~"
	if ( ($l2 = substr($num, -2, 1)) >= 2 && $l2 <= 9) $r .= $names[20][$l2-2] ." ";
	if (($teen = $l2.$l1) >= 10 && $teen <= 19) $r .= $names[10][$teen-10];
	else if ($l1 >= 1 && $l1 <= 2) $r .= $names[$l1][$gender];
	else if ($l1 >= 3 && $l1 <= 9) $r .= $names[3][$l1-3];
 
	//if (substr($r, -1) == '~') $r = substr($r, 0, strlen($r)-1);
	//$r = str_replace("~", "", $r);
 
	return trim($r);
}
 
php ?>
for ($i = 0; $i < 10; $i++) {
	$n = rand(0, 90);
	echo $n ." - ". ru_number($n) . "<br>";
}
echo ru_number(2);
 
48 - сорок восемь
15 - пятнадцать
7 - семь
19 - девятнадцать
20 - двадцать
24 - двадцать четыре
89 - восемьдесят девять
2 - два
57 - пятьдесят семь
0 - ноль
два