Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations biv343 on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Function that converts integers to numbers in words

Status
Not open for further replies.

748323

Programmer
Dec 10, 2004
70
US
I know that I can use some weird library to do this, but that's not fun, and I don't actually learn anything. I wrote a small function that is supposed to work up to 99, but it only works with integers 0-19. What's wrong with the script that returns the words for 20-99? It doesn't return false. It just returns nothing. Thanks.

Code:
<?

function intnum($integer) {

	if (is_int($integer)) {
		$num_array = array("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine");

		$irreg = array("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen");

		$double_digit = array("twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety");

		if (strlen($integer) == 1){ 
			return $num_array[$integer];
		} elseif ($integer >=10 && $integer <= 19) {
			return $irreg[$integer - 10];
		} elseif (strlen($integer) == 2){
			return $double_digit[$integer{0} - 2] . " " . $num_array[$integer{1}];
		}

	} else {
		return false;
	}
}

echo intnum(54); 

?>
 
Code:
return $double_digit[$integer{0} - 2] . " " . $num_array[$integer{1}];
The above line is causing the problem. You are trying to access the array element by non integer index.
$integer{0} gives you the first character of the value you pass to the function .
Using settype() can be usefull here as follows.
Code:
<?php

function intnum($integer) {

    if (is_int($integer)) {
        $num_array = array("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine");

        $irreg = array("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen");

        $double_digit = array("twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety");

        if (strlen($integer) == 1){ 
            return $num_array[$integer];
        } elseif ($integer >=10 && $integer <= 19) {
			$print = $integer - 10 ;
			//echo $print ;
            return $irreg[$integer - 10];
        } elseif (strlen($integer) == 2){
            //return $double_digit[$integer{0} - 2] . " " . $num_array[$integer{1}];
			$temp = $integer ;
			$x = substr($temp,0,1) - 2;  
			//echo $x ;
			[b]settype($x,"integer") ;[/b]
			$y=substr($integer,1,1) ;  
			//echo "y:".$y ;
			[b]settype($y,"integer") ;[/b]
			if ( $y == 0) return $double_digit[$x] ;
			else return $double_digit[$x] . " " . $num_array[$y];
        }

    }
	else {
        return false;
    }
}

echo intnum(54); 

?>

Hope that helps.



--------------------------------------------------------------------------
I never set a goal because u never know whats going to happen tommorow.
 
I'll give that a try. Just wondering. Will substr() help me here, or will I need to use string{} and settype()?

Instead of using your code, can I do something like:

Code:
$ch1 = $integer{0};
$ch1 = settype($ch1, "int");

Thanks.
 
You can very well use the above code, but if you try some arithmatic with the first line it will give you an error :)




--------------------------------------------------------------------------
I never set a goal because u never know whats going to happen tommorow.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top