I have a problem in outputing words from eleven to nineteen, instead of eleven it outputs ten one and twelve outputs ten two and so on upto nineteen, but in decimals it correctly outputs ten to nineteen
PHP latest, Webserver
<?php
function toWords($num) {
$ones = array(
0 => "Zero",
1 => "One",
2 => "Two",
3 => "Three",
4 => "Four",
5 => "Five",
6 => "Six",
7 => "Seven",
8 => "Eight",
9 => "Nine",
10 => "Ten",
11 => "Eleven",
12 => "Twelve",
13 => "Thirteen",
14 => "Fourteen",
15 => "Fifteen",
16 => "Sixteen",
17 => "Seventeen",
18 => "Eighteen",
19 => "Nineteen",
"014" => "Fourteen"
);
$tens = array(
0 => "Zero",
1 => "Ten",
2 => "Twenty",
3 => "Thirty",
4 => "Forty",
5 => "Fifty",
6 => "Sixty",
7 => "Seventy",
8 => "Eighty",
9 => "Ninety"
);
$hundreds = array(
"Hundred",
"Thousand",
"Million",
"Billion",
"Trillion",
"Quadrillion"
); /*limit t quadrillion */
$num = number_format($num, 2, ".", ",");
$num_arr = explode(".", $num);
$wholenum = $num_arr[0];
$decnum = $num_arr[1];
$whole_arr = array_reverse(explode(",", $wholenum));
krsort($whole_arr, 1);
$rettxt = "";
foreach ($whole_arr as $key => $i) {
while (substr($i, 0, 1) == "0")
$i = substr($i, 1, 5);
if ($i < 20) {
/* echo "getting:".$i; */
$rettxt .= $ones[$i];
} elseif ($i < 100) {
if (substr($i, 0, 1) != "0") $rettxt .= $tens[substr($i, 0, 1)];
if (substr($i, 1, 1) != "0") $rettxt .= " ".$ones[substr($i, 1, 1)];
} else {
if (substr($i, 0, 1) != "0") $rettxt .= $ones[substr($i, 0, 1)]." ".$hundreds[0];
if (substr($i, 1, 1) != "0")$rettxt .= " ".$tens[substr($i, 1, 1)];
if (substr($i, 2, 1) != "0")$rettxt .= " ".$ones[substr($i, 2, 1)];
}
if ($key > 0) {
$rettxt .= " ".$hundreds[$key]." ";
}
} $rettxt = $rettxt." Pesos";
if ($decnum > 0) {
$rettxt .= " and ";
if ($decnum < 20) {
$rettxt .= $ones[$decnum];
} elseif ($decnum < 100) {
$rettxt .= $tens[substr($decnum, 0, 1)];
$rettxt .= " ".$ones[substr($decnum, 1, 1)];
}
$rettxt = $rettxt." Centavos";
}
return $rettxt;
}
?>
The output is Ten Two instead of Twelve (eleven to nineteen) But in decimal it output correctly the words eleven to nineteen
Four Thousand Two Hundred Ten Two Pesos (P 4,212.00), One Thousand Nine Hundred Ten Seven Pesos and Eighteen Centavos (P 1,917.18)... I fount this code at this website : https://www.studentstutorial.com/php/number-to-words.php