Andreas Cloos: ereg_replace() oder preg_replace() will nicht

Beitrag lesen

Hi lulu, gerade auf http://www.phpbuilder.com/ gefunden:

<? /****************************************   numToString(int $number);

Author: Chris Heald   Email: cheald45@hotmail.com   Creation date: 1/9/02

License: No restriction, provided this header is left intact. You may     change the purpose if you update the code - leave the author, email,     creation date, license, and changelog intact. You may append to the     changelog as you make changes.

Purpose:   Use to convert a numeric number to a literal string equivalent.   ie: numToString(10) returns "ten".   As of right now, it works for any number up   to 999,999,999,999,999,999,999,999.999999999 - if you need more than that,   add to the $places array.

Possible future enhancements:     Multiple languages. I might be able to get some Spanish done, but other     than that, I'm out of luck. If anyone wants to adapt language files, please     feel free. I'm sure the logic will have to be changed, too.

I needed this for a personal site, and thought I'd share it. Please feel free   to expand or enhance it, and feel free to email me if you have questions.

*** Change Log ***   01/08/02 - CMH     Created File. Version 1.00   01/16/02 - CMH     Fixed problem with numbers between 14 and 19 being translated as "teen four", "teen five", etc.     Fixed lack of commas in places after the decimal.     Fixed lack of place notation after the decimal.     Fixed lack of dashes in numbers after the decimal.   ****************** ****************************************/ function numToString($number) {   global $single, $hundred, $odd, $tens;   $return = "";   $single = array (           "1"        =>        "one",           "2"        =>        "two",           "3"        =>        "three",           "4"        =>        "four",           "5"        =>        "five",           "6"        =>        "six",           "7"        =>        "seven",           "8"        =>        "eight",           "9"        =>        "nine",           "0"        =>        "zero"   );   $hundred        =        "hundred";   $places = array (           "0"        =>        "",           "1"        =>        "thousand",           "2"        =>        "million",           "3"        =>        "billion",           "4"        =>        "trillion",           "5"        =>        "quadrillion",           "6"        =>        "quintillion",           "7"        =>        "sextillion"   );   $tens = array (           "1"        =>        "teen",           "2"        =>        "twenty",           "3"        =>        "thirty",           "4"        =>        "forty",           "5"        =>        "fifty",           "6"        =>        "sixty",           "7"        =>        "seventy",           "8"        =>        "eighty",           "9"        =>        "ninety"   );   $odds = array (           "10"        =>        "ten",           "11"        =>        "eleven",           "12"        =>        "twelve"   );   if(!is_numeric($number))     return false;   $parts = explode(".",$number);   $number = $parts[0];   $decimal = @$parts[1];   if(@!$number)     $return = "zero ";   if(@!$decimal)     $decimal = 0;   $place = floor(strlen($number) / 3);   $remainder = 3 - (strlen($number) % 3);   $number = str_pad($number,($place * 3 == 0 ? 3 : $place * 3), "0", STR_PAD_LEFT);   while(strlen($number) > 0) {     $sets[@++$i] = substr($number,strlen($number) - 3, 3);     $number = substr($number,0,strlen($number) - 3);   }   $setno = 0;   $sets = array_reverse($sets);   foreach($sets as $set) {     $set = str_pad($set,3, "0", STR_PAD_LEFT);     $p1 = substr($set,0,1);     $p2 = substr($set,1,2);     if(substr($set,0,1) != "0")       $return .= $single[$p1] . " " . $hundred . " ";     $add = "";     if(@$odds[$p2])       $return .= $odds[$p2] . " ";     else {       if(substr($p2,0,1) != "0") {         if(substr($p2,0,1) == "1")           $add = "teen";         else           $return .= $tens[substr($p2,0,1)] . (substr($p2,1,1) == 0 ? " " : "-");       }       if(substr($p2,1,1) != "0")         $return .= $single[substr($p2,1,1)] . "$add ";     }     $return .= $places[sizeof($sets) - $setno - 1] . ", ";     $setno++;   }   $return = eregi_replace(", $","",$return);   if($decimal) {     $return .= "and ";     $number = "$decimal";     $place = floor(strlen($number) / 3);     $remainder = 3 - (strlen($number) % 3);     $number = str_pad($number,$place * 3, "0", STR_PAD_LEFT);     $sets = array();     $i = 0;     while(strlen($number) > 0) {       $sets[@++$i] = substr($number,strlen($number) - 3, 3);       $number = substr($number,0,strlen($number) - 3);     }     $setno = 0;     $sets = array_reverse($sets);     foreach($sets as $set) {       $set = str_pad($set,3, "0", STR_PAD_LEFT);       $p1 = substr($set,0,1);       $p2 = substr($set,1,2);       if(substr($set,0,1) != "0")         $return .= $single[$p1] . " " . $hundred . " ";       if(@$odds[$p2])         $return .= $odds[$p2] . " ";       else {         $add = "";         if(substr($p2,0,1) != "0")           if(substr($p2,0,1) == "1")             $add = "teen";           else             $return .= $tens[substr($p2,0,1)] . (substr($p2,1,1) == 0 ? " " : "-");;         if(substr($p2,1,1) != "0")           $return .= $single[substr($p2,1,1)] . "$add ";       }       $return .= $places[sizeof($sets) - $setno - 1] . ", ";       $setno++;     }     $size = strlen($decimal) == 1 ? "ten" : $places[strlen($decimal)-2];     $return = eregi_replace(" , $"," ",$return);     $return .= $size . "th";     if(@$decimal != "1")       $return .= "s";   }   return ucfirst($return); }

Das löst (hopefully) alle meine Probleme! Und verschafft Dir ein freies Wochenende, falls Du das echt vorhattest.

-- Greetz, Andreas