additionner 1 en base 36 php

600px-US_36.pngJe terminais ce billet mémo d'une rewriterule en expliquant que j'indiquerai la finalité de ce que j'étais en train de coder dans un billet suivant. Ce n'est pas encore pour maintenant mais vous pouvez déjà deviner ce que je suis en train de coder pour le fun car le fait d'incrémenter un nombre en base 36 fait partie de mes besoins.

Vu que c'est je pense un bon exo d'algorythme, que c'est pour le fun (je ne ferai pas de commerce avec le projet final), ça a fait l'objet d'une petite discussion sur le forum de nolife.

<?php
 
function incrementb36($nombretoincrement)
{
    // Gnieark 2010
   // http://blog-du-grouik.tinad.fr
    // ajoute 1 à un nombre (une chaine de caracteres en fait) codé en base 36
    // la base 36 est ça:
    $b36=array( 0 => '0',    1 => '1',2 => '2',3 => '3',4 => '4',5 => '5',6 => '6',7 => '7',    8 => '8',9 => '9',10 => 'a',11 => 'b',12 => 'c',13 => 'd',14 => 'e',    15 => 'f',16 => 'g',17 => 'h',18 => 'i',    19 => 'j',20 => 'k',21 => 'l',22 => 'm',23 => 'n',24 => 'o', 25 => 'p',26 => 'q',    27 => 'r',28 => 's',29 => 't',30 => 'u',31 => 'v',32 => 'w',33 => 'x',34 => 'y',35 => 'z');
 
    $i = strlen($nombretoincrement);
 
    $x=$i;
    while (substr($nombretoincrement,($x-1),1 )=='z'){
        /*
        *Pour les permutations, découpons la chaine en trois parties
        *substr($nombretoincrement,0,$x-1) est la partie gauche
        *substr($nombretoincrement,($x-1),1 ) est le caractere en question
        *substr($nombretoincrement, $x ) est la partie de droite
        */
 
        //passer le z en question en 0:
        $nombretoincrement = substr($nombretoincrement,0,$x-1).'0'.substr($nombretoincrement, $x );
        if ($x==1)
        {
            // On est arrivé au bout de la chaine et c'est toujours un 'z'
            $nombretoincrement='1'.$nombretoincrement;
            return $nombretoincrement;
        }
        //décrementer le compteur x
        $x=$x-1;    
    }
    //faire l'addition +1 simple:
    $nombretoincrement = substr($nombretoincrement,0,$x-1).$b36[array_search(substr($nombretoincrement,($x-1),1 ),$b36)+1].substr($nombretoincrement, $x );
    return $nombretoincrement;
}
 
 
//Pour le test:
$a='0';
for ($j=0; $j<10000; $j++){
    $a=incrementb36($a);
    echo "<p>".$a."</p>";
}
?>
Page top