Поиск словоформ к числам
24 октября 2011 г.
Функция принимает целое число и отдает на его основе нужную словоформу из трех предложенных.
function num_word($n,$a,$b,$c,$m=1)
{
$n=sprintf("%.0f",$n);
$x=abs($n>9?substr($n,-2):$n);
return ($m?($m==2?number_format($n,0,' ',' '):$n).' ':'').(($x%=100)>9&&$x<20||($x%=10)>4||$x==0?$c:($x==1?$a:$b));
}
echo num_word(54,'метр','метра','метров'); // выдаст «54 метра»
echo num_word(54,'метр','метра','метров',0); // выдаст «метра»
echo num_word(5454045,'метр','метра','метров'); // выдаст «5454045 метров»
echo num_word(5454045,'метр','метра','метров',2); // выдаст «5 454 045 метров» (отбивка пробелами через 3 разряда)