Page 1 of 1

Numbers in written format

Posted: Thu Mar 27, 2008 2:41 pm
by GeertDD
I would like to convert (int) 1 to (string) "one", 2 to "two", 65 to "sixty-five", etc.

Does anybody know of a PHP function that does that? Some snippet maybe? Thanks.

Re: Numbers in written format

Posted: Thu Mar 27, 2008 3:54 pm
by GeertDD
Well, I quickly cooked something together myself. This works for numbers until 99. Does the job for my situation. Feel free to expand or improve the code.

Code: Select all

<?php
 
class text {
 
    /**
     * Converts a number (0-99) to its written version. Example: 5 becomes "five".
     * Larger or smaller numbers will be returned untouched.
     *
     * @param   integer
     * @return  string|integer
     */
    public static function num2str($num)
    {
        static $zero2nineteen = array
        (
            'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine',
            'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'
        );
 
        static $twenty2ninety = array
        (
            2 => 'twenty', 'thirty', 'fourty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'
        );
 
        // Done with invalid or out-of-range numbers
        if ( ! ctype_digit((string) $num) OR $num < 0 OR $num > 99)
            return $num;
 
        // 0-19 is hard-coded in the array
        if ($num < 20)
            return $zero2nineteen[$num];
 
        // Pull apart first and second digit
        $num = (string) $num;
        $str = $twenty2ninety[$num[0]];
        $str .= ($num[1] === '0') ? '' : '-'.$zero2nineteen[$num[1]];
 
        return $str;
    }
}
By the way, maybe somebody could move this to the code snippets forum? Thank you.