|
Постоянный
Регистрация: 14.05.2006
Сообщений: 334
Провел на форуме: 1543521
Репутация:
272
|
|
аааааа, чувак, я не разбирался, но мне кажеться у тебя с функцией все нормально. Просто объявление своих массивов втули во внутырь функции. В пхп все что за пределами функции внутри ее не видно.
-------Добавлено--------
Короче смотри братец. В функции все нормально кроме одного - в делфи нумераци массивов (при этом раскладе) начиналась с 1, а в пхп с 0. Из-за этого получались косяки. Вот я тупо поменял все значения массивов на 1 меньше. И все работает. А так все осталось твоим прежним. Держи:
PHP код:
function IntToStroka($n)
{
$N1 = Array("ноль","один","два","три","четыре","пять","шесть","семь","восемь","девять");
$N1000 = Array("одна","две","три","четыре","пять","шесть","семь","восемь","девять");
$N11 = Array("десять","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать","шестнадцать","семнадцать","восемнадцать","девятнадцать");
$N2 = Array("десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто");
$N3 = Array("сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот");
$NThousand = Array("тысяча ","тысячи ","тысяч ");
$NMillion = Array("миллион ","миллиона ","миллионов ");
$degt = false;
$degm = false;
$s = strval($n);
$res = "";
$buf="";
for($i=strlen($s)-1;$i>=0;$i--)
{
$dec=strlen($s)-$i; //получаем разряд
// echo $dec;
$j=intval($s[$i]);
if($j==0)$j0=0;
if (!in_array($j,range(1,9)) && ($dec != 1))continue;
if (in_array($dec,array(1,4,7,10)))
if (intval($s[$i]) == 1)
{
$j0 = $j;
continue;
}
if (in_array($dec,array(2,5,8,11)))
if ($j == 1)
{
switch($dec)
{
case 2: $res = $N11[$j0]." "; break;
case 5: $res = $N11[$j0]." ".$NThousand[2].$res; $degt = true; break;
case 8: $res = $N11[$j0]." ".$NMillion[2].$res; $degm = true; break;
}
continue;
}
if (in_array($dec,range(4,6)))
{
if ($j != 0 && !$degt)
{
if ($dec == 4)
switch($j)
{
case 1: $buf = $NThousand[0]; break;
case 2:
case 3:
case 4: $buf = $NThousand[1]; break;
case 5:
case 6:
case 7:
case 8:
case 9: $buf = $NThousand[2]; break;
default: $buf = $NThousand[2]; $degt = true;
}
}
}
if (in_array($dec,range(7,9)))
{
if ($j != 0 && !$degm)
{
if ($dec == 7)
switch($j)
{
case 1: $buf = $NMillion[0]; break;
case 2:
case 3:
case 4: $buf = $NMillion[1]; break;
case 5:
case 6:
case 7:
case 8:
case 9: $buf = $NMillion[2]; break;
default: $buf = $NMillion[2]; $degm = true;
}
}
}
$res = $buf.$res;
while ($dec > 3)
$dec -= 3;
switch ($dec)
{
case 1: if ($j != 0) if ($degt && !$degm) $res = $N1000[$j]." ".$res; else $res = $N1[$j]." ".$res; break;
case 2: $res = $N2[$j-1]." ".$res; break;
case 3: $res = $N3[$j-1]." ".$res; break;
}
$buf = "";
$j0 = $j;
}
return $res;
}
Последний раз редактировалось je0n; 08.04.2007 в 01:03..
|