ho un dubbio esistenziale...

ho scritto questo codice:

Codice PHP:
$scambi=1;
function 
xt($fn){ 
$fn strtolower($fn) ; 
$exts split("[/\\.]"$fn) ; 
$n count($exts)-1
$exts $exts[$n]; 
return 
$exts
}

$dir="./res/";
$h=opendir($dir);
$cnt_d=0;
while(
$file=readdir($h)){
    if((
strtolower(xt($file))==strtolower($file))&&($file!=".")&&($file!="..")){
        
$dirs[$cnt_d]=$file;            //Aggiungi cartella all'array in posizione $cnt;
        
$cnt_d++;                    //aumenta il contatore cartelle (prima cartella ha indice 0);
    
}
}

//e già qui l'array dovrebbe essere ordinato per benino
//ma siccome di fatto non me lo ordina sono passato ad ordinarlo a mano

$pass_asc=1;
$pass_desc=1;
while(
$scambi==1){
    
$scambi=0;
    for(
$i=$pass_desc;$i<$cnt_d-$pass_asc;$i++){
        if(
intval(substr($dirs[$i-1],0,2))>intval(substr($dirs[$i],0,2))){
//quest'ultima riga va spiegata: le cartelle lette e poste nell'array
//hanno nomi NNNAbcAbc dove NNN è un numero scritto in 3 cifre (001, 002, 003)
            
$temp=$dirs[$i-1];
            
$dirs[$i-1]=$dirs[$i];
            
$dirs[$i]=$temp;
            
$scambi=1;
        }
        
$pass_asc++;
        
        if(
$scambi!=0){
            for(
$i=$cnt_d-$pass_asc;$i>$pass_desc;$i--){
                
$temp=$dirs[$i-1];
                
$dirs[$i-1]=$dirs[$i];
                
$dirs[$i]=$temp;
                
$scambi=1;
            }
        }
    }

qualcuno ha qualche idea per spiegarmi per quale sadica ragione mi ritrovo ancora con un array non ordinato e quello che è ordinato lo è al contrario?

stampando l'array con:
Codice PHP:
for($i=0$i<$cnt_d$i++)
echo 
$dirs[$i]."
"

mi da una lista di cartelle tipo
005cartella5
003cartella3
002cartella2
001cartella1
004cartella4

sbaglio o non ha senso?