Number to words in php

NumbWordter is a number to word converter class written in php. This class will be useful to display numbers as words.

Usage:

$converter=new NumbWordter();
echo $converter->convert(1823912);
// echoes - One million, eight hundred and twenty three thousand, nine hundred and twelve

Remember these..

  •  The class uses “million” terminology to name the number. [Thousand, million, billion, trillion, quadrillion, quintillion, sextillion, septillion, octillion, nonillion, decillion, unidecillion, duodecillion, tredecillion and quattuordecillion]
  • If no number is passed, there will be no output.
  •  The length of number passed, should be maximum of 48 digits only.
class NumbWordter
{
	private $discrete=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','-'=>'minus');
	
	private $ten_digit_prefix=array('2'=>'twenty','3'=>'thirty','4'=>'forty','5'=>'fifty','6'=>'sixty',
	'7'=>'seventy','8'=>'eighty','9'=>'ninty');
	
	private $mool_array=array('',"thousand,","million,","billion,","trillion,","quadrillion,","quintillion,","sextillion,",
	"septillion,","octillion,","nonillion,","decillion,","unidecillion,","duodecillion,","tredecillion,","quattuordecillion,");

	private $sentence; //final sentence
	private $error; //error if generated

	//methods
	private function twodigits($num)
	{
		//displays from 1 to 99
		if($num<20) 			return $this->discrete[$num];
		else
			return $this->ten_digit_prefix[substr($num,0,1)].' '.$this->discrete[substr($num,1,1)];
	}
	
	//displays three digit numbers
	private function threedigits($num)
	{
		return $this->discrete[substr($num,0,1)].' hundred and '.$this->twodigits(substr($num,1,2));
	}
	
	private function decider($num)
	{
		if(strlen($num)<=2) 			return $this->twodigits($num);
		else
			return $this->threedigits($num);
	}
	
	public function convert($num)
	{
		//return if more than 48 digits
		if(strlen($num)>48) 
		{
			$this->error="Number out of bounds";
			return $this->error;
		}
		
		//check if first 
		if(substr($num,0,1)=="-")
		{
			$this->sentence.='minus ';
			$num=substr($num,1,strlen($num)-1);
		}
		
		if(strlen($num)<=3) 		{ 			$this->sentence.=$this->decider($num);
		}
		else
		{
			$k=strrev($num);
			for($i=0;$i<strlen($k);$i=$i+3){$arro[]=strrev(substr($k,$i,3));} 			//reverse again 			$arro=array_reverse($arro); 			//print_r($arro); 			$mool=ceil(strlen($num)/3); 			if((strlen(num)%3)==0){$mool--;} 			$this->sentence.=$this->decider($arro[0]).' '.$this->mool_array[$mool];
			$mool--;
			//leave the first one and prepare string of others
			$arrlen=count($arro);
			for($i=1;$i<$arrlen;$i++) 			{ 				$this->sentence.=' '.$this->decider($arro[$i]);
				if($mool!=0)
				{
					$this->sentence=' '.$this->sentence.' '.$this->mool_array[$mool];
				}
				$mool--;
			}
		}
		return ucfirst(trim($this->sentence));
	}
}
0