Skip to content

Instantly share code, notes, and snippets.

@praul
Created January 7, 2025 12:29
Show Gist options
  • Save praul/0c38b12892b4aa6989e5c778d695a4ad to your computer and use it in GitHub Desktop.
Save praul/0c38b12892b4aa6989e5c778d695a4ad to your computer and use it in GitHub Desktop.
PHP - Zahl in Worten - Number to words (german)
<?php
/* Danke ChatGPT*/
function zahlInWorten($num) {
if (!is_numeric($num)) {
return "Eingabe ist keine Zahl.";
}
$zahlen = [
0 => "null", 1 => "eins", 2 => "zwei", 3 => "drei", 4 => "vier",
5 => "fünf", 6 => "sechs", 7 => "sieben", 8 => "acht", 9 => "neun",
10 => "zehn", 11 => "elf", 12 => "zwölf", 13 => "dreizehn", 14 => "vierzehn",
15 => "fünfzehn", 16 => "sechzehn", 17 => "siebzehn", 18 => "achtzehn", 19 => "neunzehn",
20 => "zwanzig", 30 => "dreißig", 40 => "vierzig", 50 => "fünfzig",
60 => "sechzig", 70 => "siebzig", 80 => "achtzig", 90 => "neunzig"
];
$stufen = [
1000 => "tausend", 1000000 => "Million", 1000000000 => "Milliarde"
];
if ($num < 0) {
return "minus " . zahlInWorten(abs($num));
}
if ($num < 20) {
return $zahlen[$num];
}
if ($num < 100) {
$zehner = intval($num / 10) * 10;
$rest = $num % 10;
return $rest ? $zahlen[$rest] . "und" . $zahlen[$zehner] : $zahlen[$zehner];
}
if ($num < 1000) {
$hunderter = intval($num / 100);
$rest = $num % 100;
// Sonderfall: "einhundert" statt "eins hundert"
$prefix = $hunderter === 1 ? "ein" : $zahlen[$hunderter];
return $prefix . "hundert" . ($rest ? " " . zahlInWorten($rest) : "");
}
foreach ($stufen as $schwelle => $name) {
if ($num < $schwelle * 1000) {
$basis = intval($num / $schwelle);
$rest = $num % $schwelle;
// Sonderfall für "eintausend" statt "eine tausend"
if ($schwelle === 1000) {
$prefix = $basis === 1 ? "ein" : zahlInWorten($basis);
} else {
$prefix = $basis === 1 ? "eine" : zahlInWorten($basis);
}
$plural = ($schwelle >= 1000000 && $basis > 1) ? "en" : "";
return $prefix . " " . $name . $plural . ($rest ? " " . zahlInWorten($rest) : "");
}
}
return "Zahl zu groß.";
}
// Beispiele
echo zahlInWorten(100); // Ausgabe: "einhundert"
echo "\n";
echo zahlInWorten(1716); // Ausgabe: "eintausend siebenhundert sechzehn"
echo "\n";
echo zahlInWorten(12345); // Ausgabe: "zwölftausend dreihundert fünfundvierzig"
echo "\n";
echo zahlInWorten(1001); // Ausgabe: "eintausend eins"
echo "\n";
echo zahlInWorten(1000000); // Ausgabe: "eine Million"
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment