note 26234 deleted from function.number-format by sniper
| From: | sniper@php.net | Date: | Tue, 30 Sep 2003 01:39:56 +0000 |
| Subject: | note 26234 deleted from function.number-format by sniper | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-57362@lists.php.net to get a copy of this message | ||
Note Submitter: jeremyirons@genevus.com
----
In my CHM version of these docs, someone asked "how can I show the number into word format
?"
I figured I would share:
function textual_number($number, $nd = false)
{
if($number == 0 || $number == "")
return "zero";
if($number < 0)
{
$number = -$number;
$words[] = "negative";
}
$thousands = array("", "thousand", "million", "billion",
"trillion", "zillion");
$numbers[0] = array("", "one hundred", "two hundred", "three
hundred", "four hundred", "five hundred", "six hundred",
"seven hundred", "eight hundred", "nine hundred");
$numbers[1] = array("", "ten", "twenty", "thirty",
"fourty", "fifty", "sixty", "seventy", "eighty",
"ninety");
$numbers[2] = array("", "one", "two", "three",
"four", "five", "six", "seven", "eight",
"nine",
"", "eleven", "twelve", "thirteen",
"fourteen", "fifteen", "sixteen", "seventeen",
"eighteen", "nineteen");
$translate[0] = array("", "one hundredth", "two hundredth",
"three hundredth", "four hundredth", "five hundredth", "six
hundredth", "seven hundredth", "eight hundredth", "nine
hundredth");
$translate[1] = array("", "tenth", "twentieth",
"thirtieth", "fourtieth", "fiftieth", "sixtieth",
"seventieth", "eightieth", "ninetieth");
$translate[2] = array( "", "first", "second", "third",
"fourth", "fifth", "sixth", "seventh", "eighth",
"nineth",
"", "eleventh", "twelveth", "thirteenth",
"fourteenth", "fifteenth", "sixteenth", "seventeenth",
"eighteenth", "nineteenth");
$a = number_format($number, 0, ".", ",");
$arr = explode(",", $a);
$arr = array_reverse($arr);
for($key = count($arr)-1; $key >= 0; $key--)
{
$segment = $arr[$key];
$segment = str_pad($segment, 3, "0", STR_PAD_LEFT);
for($p = 0; $p < strlen($segment); $p++)
{
$s = substr($segment, $p, 1);
$nexts = substr($segment, $p+1, 1);
if($p == 1 && $s == 0 && $nexts != 0 && count($words) > 0)
$words[] = "and";
if($s > 0)
{
$sub = 2 - $p;
if($p == 1 && $s == 1 && $nexts != 0)
{
//special handling for eleven to nineteen
$nset = $numbers[2];
$words[] = $nset[10 + $nexts];
break;
}
$nset = $numbers[$p];
$words[] = $nset[$s];
}
}
if($thousands[$key] != "")
$words[] = ($thousands[$key] != "" ? " $thousands[$key]" : "");
}
if($nd)
{
$lastword = $words[count($words)-1];
for($j = 0; $j < count($numbers); $j++)
foreach($numbers[$j] as $key => $value)
if($value == $lastword)
$words[count($words)-1] = $translate[$j][$key];
}
return implode(" ", $words);
}