Zahl zu Wort
September 2009
Mit einem grossen Skript kann man kleine Zahlen gross machen. Diese Funktion verwandelt eine Zahl in das entsprechende Zahlwort.
Zwar findet diese Funktion nur bei Zahlen bis 9999 Anwendung, doch wenn man das Prinzip durchschaut, kann sie beliebig erweitert werden.
Die Funktion ist so angelegt, dass nicht benötigte Teile gelöscht werden können. Wenn beispielsweise nur zweistellige Zahlen eingegeben werden, können das erste und die letzten beiden (else)if-Statements gestrichen werden.
Beispiel zur Anwendung:
Der zweite, optionale Parameter $genus konzentriert sich darauf, ob es "eins", "einen", "eine" oder "ein" Wort heisst. Als Wert kann man die entsprechende Endung angeben. Wenn er weg gelassen wird, wird ein "s" an "ein" angehängt, was z.B. für alleinstehende Zahlen nützlich ist.
Zwar findet diese Funktion nur bei Zahlen bis 9999 Anwendung, doch wenn man das Prinzip durchschaut, kann sie beliebig erweitert werden.
Die Funktion ist so angelegt, dass nicht benötigte Teile gelöscht werden können. Wenn beispielsweise nur zweistellige Zahlen eingegeben werden, können das erste und die letzten beiden (else)if-Statements gestrichen werden.
<?php
function zahl2wort($int, $genus='s'){
$int = (string)(int)$int;
$z2w = array('null'=>'null', 'und'=>'und',
1=>array('ein'.$genus,'ein','zwei','drei','vier','fünf','sechs','sieben','acht','neun','zehn',
'elf','zwölf','dreizehn','vierzehn','fünfzehn','sechzehn','siebzehn','achtzehn','neunzehn'),
2=>array('zwanzig','dreissig','vierzig','fünfzig','sechzig', 'siebzig','achtzig','neunzig'),
3=>array('hundert','tausend')
);
$intrev = strrev($int);
$len = strlen($intrev); // Stellen
$zif = str_split($intrev); // Ziffern
$zif = array_map('intval', $zif);
$wort = '';
if($len===1){ # Einstellige Zahl
if($zif[0]===0) $wort .= $z2w['null']; // 0
elseif($zif[0]===1) $wort .= $z2w[1][0]; // 1
else $wort .= $z2w[1][$zif[0]]; // 2 bis 9
}
elseif($len===2){ # Zweistellige Zahl
if($zif[1]===1) $wort .= $z2w[1][$zif[0]+10]; // 10 bis 19
elseif($zif[1]>=2 & $zif[0]!==0) $wort .= $z2w[1][$zif[0]].$z2w['und']; // [2-9][1-9]
if($zif[1]>=2) $wort .= $z2w[2][$zif[1]-2]; // 20 bis 99
}
elseif($len===3){ # Dreistellige Zahl
$wort .= $z2w[1][$zif[2]].$z2w[3][0]; // 100 bis 999
if($zif[1]===0 & $zif[0]==1) $wort .= $z2w[1][0]; // n01
elseif($zif[1]===0 & $zif[0]!==0) $wort .= $z2w[1][$zif[0]]; // n02 bis n09
elseif($zif[1]===1) $wort .= $z2w[1][$zif[0]+10]; // n10 bis n19
elseif($zif[1]>=2 & $zif[0]!=0) $wort .= $z2w[1][$zif[0]].$z2w['und']; // n[2-9][1-9]
if($zif[1]>=2) $wort .= $z2w[2][$zif[1]-2]; // n20 bis n99
}
elseif($len===4){ # Vierstellige Zahl
$wort .= $z2w[1][$zif[3]].$z2w[3][1]; // 1000 bis 9999
if($zif[2]!==0) $wort .= $z2w[1][$zif[2]].$z2w[3][0]; // n100 bis n999
elseif($zif[1]!==0 || $zif[0]!==0) $wort .= $z2w['und']; // n0[1-9][1-9]
if($zif[1]===0 & $zif[0]===1) $wort .= $z2w[1][0]; // nn01
elseif($zif[1]===0 & $zif[0]!==0) $wort .= $z2w[1][$zif[0]]; // nn02 bis nn09
elseif($zif[1]===1) $wort .= $z2w[1][$zif[0]+10]; // nn10 bis nn19
elseif($zif[1]>=2 & $zif[0]!==0) $wort .= $z2w[1][$zif[0]].$z2w['und']; // nn[2-9][1-9]
if($zif[1]>=2) $wort .= $z2w[2][$zif[1]-2]; // nn20 bis nn99
}
return $wort;
}
?>
Beispiel zur Anwendung:
<?php
$stunden = zahl2wort(idate('H'), '');
$minuten = zahl2wort(idate('i'), 's');
printf('Aktuelle Uhrzeit: %s Uhr %s', $stunden, $minuten);
?>
Mögliche Ausgabe:Aktuelle Uhrzeit: vier Uhr achtundzwanzig
Der zweite, optionale Parameter $genus konzentriert sich darauf, ob es "eins", "einen", "eine" oder "ein" Wort heisst. Als Wert kann man die entsprechende Endung angeben. Wenn er weg gelassen wird, wird ein "s" an "ein" angehängt, was z.B. für alleinstehende Zahlen nützlich ist.
