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.

<?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]>=$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]===$zif[0]==1$wort .= $z2w[1][0]; // n01
    
elseif($zif[1]===$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]>=$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]!==|| $zif[0]!==0$wort .= $z2w['und']; // n0[1-9][1-9]
    
if($zif[1]===$zif[0]===1$wort .= $z2w[1][0]; // nn01
    
elseif($zif[1]===$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]>=$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.
 
PHP


Andere Einträge