<?

/**
 * Visszater az adott szam magyar irott alakjaval.
 * 
 * Figyelembe veszi a negativ szamokat, es a magyar helyesirast is.
 *
 * @link        http://www.adrenaline.hu/content/7-Szambol_szoveg
 * @author        adrenaline
 * @license        GPL v2.0
 * @copyright    2009. 04. 11.
 * @version        1.0
 * 
 * @param        int        $number        Kiirando szam.
 * 
 * @return        string
 */
function writeNumber($number) {
    
$single = array('egy''kettő''három''négy''öt''hat''hét''nyolc''kilenc''tíz');
    
$teen = array('tizen''huszon''harminc''negyven''ötven''hatvan''hetven''nyolcvan''kilencven');
    
$other = array('ezer''millió''milliárd''billió''billiárd'); // http://mek.oszk.hu/00000/00056/html/186.htm
    
    
$number intval($number);
    if (
$number === 0) {
        return 
'nulla';
    }
    
    
$print = ($number 0) ? 'mínusz ' '';
    
    
$number abs($number);
    
$dash = ($number <= 2000) ? false true;
    
    
$i count($other);
    for (; 
$i 0$i--) {
        
$ref pow(1000$i);
        if (
$number >= $ref) {
            
$bit = (int) floor($number $ref);
            
$number -= $bit $ref;
            
$print .= writeNumber($bit) . $other[$i 1];
            
$print .= ($number && $dash) ? '-' '';
        }
    }
    
    if (
$number >= 100) {
        
$ref = (int) floor($number 100);
        
$number -= $ref 100;
        
$print .= $single[$ref 1] . 'száz';
    }
    
    if (
$number 10) {
        
$ref = (int) floor($number 10);
        
$number -= $ref 10;
        
$print .= ($number === 0) ? 'húsz' $teen[$ref 1];
    }
    
    if (
$number 0) {
        
$print .= $single[$number 1];
    }
    
    return 
$print;
}

$test = array(56385132854, -4342020593991);

?>

<code><pre>
<? foreach ($test as $n): ?>
<?= $n ?>
    : <?= writeNumber($n) . "\n" ?>
<? 
endforeach; ?>
</pre></code>