Napisałem kiedyś funkcje w php do generowania zapisu słownego. Straszna to amatorka

(dopiero zaczynałem z php) ale może się przyda. Nie uwzględnia groszy ale łatwo to sobie dopisać.
Kod
function trzy($trzy,$spojnik,$wariant)
{
// opis: Podfunkcja dla slownie() generująca trójelementowe ciągi wyrazowe.
$kwota=$trzy;
$p=2;
$sp=$spojnik;
if ($wariant!="RW_1") {$spojnik="";};
if ($kwota{$p-1}=="1")
{
switch ($kwota{$p})
{
case "0": $zdanie="dziesięć".$spojnik.$zdanie; break;
case "1": $zdanie="jedenaście".$spojnik.$zdanie; break;
case "2": $zdanie="dwanaście".$spojnik.$zdanie; break;
case "3": $zdanie="trzynaście".$spojnik.$zdanie; break;
case "4": $zdanie="czternaście".$spojnik.$zdanie; break;
case "5": $zdanie="piętnaście".$spojnik.$zdanie; break;
case "6": $zdanie="szesnaście".$spojnik.$zdanie; break;
case "7": $zdanie="siedemnaście".$spojnik.$zdanie; break;
case "8": $zdanie="osiemnaście".$spojnik.$zdanie; break;
case "9": $zdanie="dziewiętnaście".$spojnik.$zdanie; break;
};
} else {
switch ($kwota{$p})
{
case "1":
if (!(($kwota{$p-1}=="0")&&($kwota{$p-2}=="0"))) {$zdanie="jeden".$spojnik.$zdanie;}; break;
case "2": $zdanie="dwa".$spojnik.$zdanie; break;
case "3": $zdanie="trzy".$spojnik.$zdanie; break;
case "4": $zdanie="cztery".$spojnik.$zdanie; break;
case "5": $zdanie="pięć".$spojnik.$zdanie; break;
case "6": $zdanie="sześć".$spojnik.$zdanie; break;
case "7": $zdanie="siedem".$spojnik.$zdanie; break;
case "8": $zdanie="osiem".$spojnik.$zdanie; break;
case "9": $zdanie="dziewięć".$spojnik.$zdanie; break;
};
};
$p--;
if (($kwota{$p}!="1")||($kwota{$p}!="0"))
{
switch ($kwota{$p})
{
case "2": $zdanie="dwadzieścia".$spojnik.$zdanie; break;
case "3": $zdanie="trzydzieści".$spojnik.$zdanie; break;
case "4": $zdanie="czterdzieści".$spojnik.$zdanie; break;
case "5": $zdanie="pięćdziesiąt".$spojnik.$zdanie; break;
case "6": $zdanie="sześćdziesiąt".$spojnik.$zdanie; break;
case "7": $zdanie="siedemdziesiąt".$spojnik.$zdanie; break;
case "8": $zdanie="osiemdziesiąt".$spojnik.$zdanie; break;
case "9": $zdanie="dziewięćdziesiąt".$spojnik.$zdanie; break;
};
};
$p--;
if ($kwota{$p}!="0")
{
switch ($kwota{$p})
{
case "1": $zdanie="sto".$spojnik.$zdanie; break;
case "2": $zdanie="dwieście".$spojnik.$zdanie; break;
case "3": $zdanie="trzysta".$spojnik.$zdanie; break;
case "4": $zdanie="czterysta".$spojnik.$zdanie; break;
case "5": $zdanie="pięćset".$spojnik.$zdanie; break;
case "6": $zdanie="sześćset".$spojnik.$zdanie; break;
case "7": $zdanie="siedemset".$spojnik.$zdanie; break;
case "8": $zdanie="osiemset".$spojnik.$zdanie; break;
case "9": $zdanie="dziewięćset".$spojnik.$zdanie; break;
};
};
if ($wariant=="RW_3") {return $zdanie.$sp;} else {return $zdanie;};
} //koniec podfunkcji trzy()
function przypadek($dwa,$sam,$duet,$wyjatek)
{
// opis: Podfunkcja dla slownie() dobierająca przypadek.
if (($dwa{0}==0)&&($dwa{1}==0)&&($dwa{2}==1))
{
return $sam;
} else {
if ((($dwa{2}=="2")||($dwa{2}=="3")||($dwa{2}=="4"))&&($dwa{1}!="1"))
{
return $wyjatek;
} else {
if (!(($dwa{0}==0)&&($dwa{1}==0)&&($dwa{2}==0)))
{
return $duet;
} else {
return "";
};
};
};
} //koniec podfunkcji przypadek()
function slownie($kwota,$waluta="PLN",$spojnik="",$wariant="RW_1")
{
// autor: Dragossani
// opis: Fukcja generuje zapis słowny na podstawie zapisu liczbowego.
//
// zmienne wejściowe:
// $kwota - wymagana - typ: integer (max. 15 cyfr) - domyślnie: [brak]
// opis: liczba która ma zostać zamieniona na zapis słowny
// $waluta - opcjonalna - typ: 'PLN'|'USD'|'GBP'|'DEM'|'EUR' - domyślnie: 'PLN'
// opis: w jakiej walucie jest kwota
// $spojnik - opcjonalna - typ: string - domyślnie: ' '
// opis: treść spójnika międzywyrazowego
// $wariant - opcjonalna - typ: 'RW_1'|'RW_3' - domyślnie: 'RW_1'
// opis: sposób odzielania wyrazów, RW_3 - trójkami, RW_1 - co każdą cyfrę
settype($kwota,"string");
$len=strlen($kwota);
$kwota=str_repeat("0",15-$len).$kwota;
$len=strlen($kwota);
$p=$len-1;
switch ($waluta)
{
case "PLN":
$waluta=przypadek($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},"złoty","złotych","złote"); break;
case "USD":
$waluta=przypadek($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},"dolar","dolarów","dolary"); break;
case "GBP":
$waluta=przypadek($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},"funt","funtów","funty"); break;
case "DEM":
$waluta=przypadek($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},"marka","marek","marki"); break;
case "EUR":
$waluta=przypadek($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},"euro","euro","euro"); break;
default:
$waluta=przypadek($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},"złoty","złotych","złote");
};
$zdanie=trzy($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},$spojnik,$wariant).$zdanie;
$p=$p-3;
$zdanie=przypadek($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},"tysiąc".$spojnik,"tysięcy".$spojnik,"tysiące".$spojnik).$zdanie;
$zdanie=trzy($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},$spojnik,$wariant).$zdanie;
$p=$p-3;
$zdanie=przypadek($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},"milion".$spojnik,"milionów".$spojnik,"miliony".$spojnik).$zdanie;
$zdanie=trzy($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},$spojnik,$wariant).$zdanie;
$p=$p-3;
$zdanie=przypadek($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},"miliard".$spojnik,"miliardów".$spojnik,"miliardy".$spojnik).$zdanie;
$zdanie=trzy($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},$spojnik,$wariant).$zdanie;
$p=$p-3;
$zdanie=przypadek($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},"bilion".$spojnik,"bilionów".$spojnik,"biliony".$spojnik).$zdanie;
$zdanie=trzy($kwota{$p-2}.$kwota{$p-1}.$kwota{$p},$spojnik,$wariant).$zdanie;
$p=$len-1;
if (trim($zdanie)=="")
{
if ($kwota{$p}=="1")
{
$zdanie="jeden".$spojnik;
};
};
$zdanie=$zdanie.$waluta;
return trim($zdanie);
} //koniec funkcji slownie()
Przykład użycia:
Kod
$waluta="USD";
$kwota=1234567890;
$spojnik="*";
$wariant="RW_1";
print(number_format($kwota, 2, ",", " ").'<BR>');
print(slownie($kwota).'<BR>');
print('***'.slownie($kwota,$waluta,$spojnik,$wariant).'***');