Ciao a tutti. Avrei la necessità di rappresentare un numero in formato letterale.
Grosso modo ci sono riuscito ma avrei bisogno del vostro aiuto per risolvere un piccolo problema.

Supponiamo che io abbia un prezzo così:
$prezzo = 2118101;
la mia funzione mi restituisce
duemilioni unocento diciottomila unocento uno
mentre io vorrei
duemilioni cento diciottomila cento uno

La soluzione a cui ho pensato io è del tipo

if ( substr($letterale,-3) == 'uno')
$letterale = str_replace("uno","",$letterale).'uno';

cioè rimuovere tutti gli uno dalla stringa, e, nel caso l'uno si riferisca all'unità finale, concatenarlo, ma vorrei sapere se è possibile all'interno della funzione implementare un controllo che faccia questo lavoro (anche perchè non avendo ancora fatto abbastanza prove non vorrei che col mio metodo ci fossero risultati imprevisti).

Il mio codice è questo:
Codice PHP:
<?php
function numero_lettere($numero)
{
    if ((
$numero 0) || ($numero 999999999))
    {
        return 
"$numero";
    }

    
$milioni floor($numero 1000000);  // Milioni  
    
$numero -= $milioni 1000000;
    
$migliaia floor($numero 1000);    // Migliaia 
    
$numero -= $migliaia 1000;
    
$centinaia floor($numero 100);     // Centinaia 
    
$numero -= $centinaia 100;
    
$decine floor($numero 10);       // Decine 
    
$unita $numero 10;               // Unità 

    
$cifra_lettere "";

    if (
$milioni)
    {
            if (
$milioni == 1)            
            
$cifra_lettere .= numero_lettere($milioni) . "milione ";
            else
            
$cifra_lettere .= numero_lettere($milioni) . "milioni ";
    }

    if (
$migliaia)
    {
            if (
$migliaia == 1)            
            
$cifra_lettere .= numero_lettere($migliaia) . "mille ";
            else
            
$cifra_lettere .= numero_lettere($migliaia) . "mila ";
        
    }

    if (
$centinaia)
    {
          
$cifra_lettere .= numero_lettere($centinaia) . "cento ";
    }

    
$array_primi = array("""uno""due""tre""quattro""cinque""sei",
        
"sette""otto""nove""dieci""undici""dodici""tredici",
        
"quattordici""quindici""sedici""diciassette""diciotto",
        
"diciannove");
    
$array_decine = array("""""venti""trenta""quaranta""cinquanta""sessanta",
        
"settanta""ottanta""novanta");

    if (
$decine || $unita)
    {
        if (
$decine 2)
        {
            
$cifra_lettere .= $array_primi[$decine 10 $unita];
        }
        else
        {
            
$cifra_lettere .= $array_decine[$decine];

            if (
$unita)
            {
                
$cifra_lettere .= $array_primi[$unita];
            }
        }
    }

    if (empty(
$cifra_lettere))
    {
        
$cifra_lettere "zero";
    }

    return 
$cifra_lettere;
}

$prezzo 2118101;
$letterale numero_lettere($prezzo);
if ( 
substr($letterale,-3) == 'uno')
$letterale str_replace("uno","",$letterale).'uno';
echo 
$letterale;
?>
Grazie per ogni eventuale consiglio.