Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/10/2009, 18:11
Avatar de mayid
mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Aporte: ordenar archivos alfabeticamente

Lei mas de 30 posts acerca de como ordenar alfabeticamente un listado de archivos que se lea con este metodo:


Código PHP:
$path "./fotos/";
        
//abrimos la carpeta
         
$dir = [COLOR="Black"][B]opendir[/B][/COLOR]($path);
        
        while (
$elemento readdir($dir)){
                         if (
$elemento == "." or $elemento == ".."){}
                         else{
                         
$lista[] = $elemento;
                         };
                        
                        
//Cerramos la carpeta
        
[COLOR="#000000"][B]closedir[/B][/COLOR]($dir);

                        if (isset(
$lista)) {
        
//sort($lista); 
        
        
foreach ($lista as $imprimir) {echo "$imprimir"."\r\n";};
        } 
La mayor parte de los comentarios son sobre el uso de sort, pero ninguno avisa que sort ordena primero las letras mayusculas y luego las minusculas:

Código PHP:
Abece
Diente
Filosofia
automatismo
etc 
Existe una alternativa a sort, que es natcasesort() . Esta funcion si ordena alfabeticamente sin importar y es case insensitive.

El problema es que en Windows me lista ok las cosas, pero en Unix no. Y esto quizas se deba a un problema de indices, que he intentado solucionar de varias formas y que a veces funcionan y a veces no, impredeciblemente y segun el listado en cuestion.

Fuera de este metodo esta el uso de scandir(), que de por si debiera ordenar alfabeticamente los resultados. Pero a mi me funciona en combinacion de natcasesort() unicamente, asi:

Código PHP:
$path "./fotos/";
        
$puntos = array('.''..');
        
$listado array_diff([B]scandir[/B]($path), $puntos);
        
$n1;
        [
B]natcasesort[/B]($listado);
        foreach(
$listado as $elemento)
            {
               if(
strpos($elemento".jpg") !== FALSE)
               {
                  echo 
"<a href='#' id='".$n."' class='miniaturas'><img src='".$path.$elemento."' alt='' /></a>\r\n";
                  
$n++;
               }
            }; 

Aqui dejo el link al uso de scandir()

http://ar.php.net/manual/en/function.scandir.php

nota: en ambos script incluyo un filtro para los directorios "." y "..". Por otro lado, uso "strpos" para comprobar extensiones de archivos que me interesan, como por ejemplo .jpg cuando listo fotos.