Primero que nada tenes que cargar los archivos en un array (si los obtenes con las funciones de directorios eso no seria problema) y despues usas usort() con esta funcion que te hice.
Aca tenes un ejemplo:
Código PHP:
function ordenaporextension($a, $b)
{
$exta = strrchr($a, "."); // obtiene la extensión de $a
$extb = strrchr($b, "."); // obtiene la extensión de $b
return strnatcasecmp($exta, $extb); // devuelve <0; =0 o >o
}
$archivos = array (
"archivo1.gif",
"archivo4.png",
"archivo2.gif",
"archivo3.jgp",
"archivo3.gif",
"archivo5.gif",
"archivo1.jgp",
"archivo2.jgp",
"archivo4.gif",
"archivo4.jgp",
"archivo3.png",
);
print_r($archivos); // muestra sin ordenar
usort($archivos, "ordenaporextension"); // aqui se ordena segun la funcion ordenaporextension()
print_r($archivos); // muestra ordenado
Algunos links!
usort ordena una matriz segun una funcion de comparacion definida por el usuario
http://www.php.net/usort
strrchr busca la ultima aparicion de una cadana
http://www.php.net/strrchr
strnatcasecmp compara 2 cadenas segun el ordena natural ( una forma facil de definir orden natural es "la que esta primero en el abecedario")
http://www.php.net/strnatcasecmp
print_r es solamente para mostrarte info de una var.
http://www.php.net/print_r
Saludos.