PHP - ordenar archivos de un directorio

 
Vista:
sin imagen de perfil

ordenar archivos de un directorio

Publicado por dani (6 intervenciones) el 12/03/2013 14:17:49
hola , tengo una pagina en la que muestro todos los archivos que hay en un directorio pero estos me aparecen sin ningun orden. ¿ cómo podría hacer para que me aparezcan ordenados alfabeticamente, o por fecha ?
Si me podeis poner el codigo que tengo que poner... mejor.

El codigo que tengo es :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
 
	if ($gestor = opendir('directorio')) {
 
	   	 echo "<ul>";
        while (false !== ($arch = readdir($gestor))) {
           if ($arch != "." && $arch != "..") {
               echo "<p><img src='imagen_a_mostrar_delante_de_cada_fichero.png' border='0' width='20' height='20'>   <a  target='_blank '  href=\"directorio/".$arch."\">".$arch."</a></p>\n";
           }
        }
        closedir($gestor);
		echo "<ul>";
 
    }
    ?>


Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ordenar archivos de un directorio

Publicado por xve (6935 intervenciones) el 12/03/2013 14:52:43
Hola Dani, puedes hacerlo de dos maneras, una manera, es coger los valores en un array, y posteriormente ordenar el array, aunque también puedes utilizar la instrucción dir() que si no recuerdo mail, ya te devuelve el listado ordenado por nombre.

Revisa este código por si te puede servir: http://www.lawebdelprogramador.com/codigo/PHP/2303-listado_de_directorios_y_carpetas_con_funcion_recursiva.html

Si quieres que te muestre un código de como ordenándolo con los arrays me lo comentas, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

ordenar archivos de un directorio

Publicado por dani (6 intervenciones) el 12/03/2013 15:07:57
Gracias xve.
Si no es mucha molestia podrias ponerme el codigo qe deberia poner basandote en el codigo qe puse arriba?
Es importante qe me aparezca delante de cada archivo la imagen a la que hago referencia en mi codigo.
Disculpa la molestias , soy bastante nuevo en esto.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ordenar archivos de un directorio

Publicado por xve (6935 intervenciones) el 13/03/2013 18:49:16
Hola Dani, la manera que yo te comentaba es esta:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
$directorio=".";
 
if ($gestor = opendir($directorio))
{
    # ponemos los valores en un array para poder ordenarlos
    $list=array();
    while (false !== ($arch = readdir($gestor)))
    {
        if ($arch != "." && $arch != "..")
        {
            $list[]=$arch;
        }
    }
 
    # ordenamos el array
    sort($list);
 
    # mostramos el contenido del array
    echo "<ul>";
        foreach($list as $fileName)
        {
            echo "<p>
                <img src='imagen_a_mostrar_delante_de_cada_fichero.png' border='0' width='20' height='20'>
                <a target='_blank' href=\"".$directorio."/".$fileName."\">".$fileName."</a>
                </p>\n";
        }
    echo "<ul>";
    closedir($gestor);
}
?>


Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

ordenar archivos de un directorio

Publicado por dani (6 intervenciones) el 14/03/2013 10:40:44
Bravo Xve ! funciona estupendamente. Muchas gracias por tu gran aporte.

Sólo un matiz curioso :
Los ordena perfectamente alfabeticamente pero ojo porque tiene en cuenta las mayusculas y las minisculas, es decir, si tengo por ejemplo los archivos A b C D e , me los ordena asi : A C D b e

¿Como podría evitar eso?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ordenar archivos de un directorio

Publicado por xve (6935 intervenciones) el 14/03/2013 21:36:29
Hola Dani, prueba así:

1
sort($list, SORT_NATURAL | SORT_FLAG_CASE);


Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

ordenar archivos de un directorio

Publicado por dani (6 intervenciones) el 15/03/2013 10:35:21
hola xve,

no me funciono....pero probé con :

natcasesort($list);

y funciona perfecto.

Y ya por ultimo...como ordenar esos archivos por fecha ?

Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ordenar archivos de un directorio por la fecha

Publicado por xve (6935 intervenciones) el 17/03/2013 20:13:15
Hola Dani, la manera que se me ocurre, es que utilices un array asociativo, guardando la fecha del mismo y luego ordenando dicho array.. algo así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
$directorio=".";
 
if ($gestor = opendir($directorio))
{
    # ponemos los valores en un array para poder ordenarlos
    $list=array();
    while (false !== ($arch = readdir($gestor)))
    {
        if ($arch != "." && $arch != "..")
        {
            $list[$arch]=filemtime($arch);
        }
    }
 
    # ordenamos el array
    asort($list);
 
    # mostramos el contenido del array
    echo "<ul>";
        foreach($list as $fileName=>$time)
        {
            echo "<p>
                <img src='imagen_a_mostrar_delante_de_cada_fichero.png' border='0' width='20' height='20'>
                <a target='_blank' href=\"".$directorio."/".$fileName."\">".$fileName."</a> (".date("d/m/Y H:i:s",$time).")
                </p>\n";
        }
    echo "<ul>";
    closedir($gestor);
}
?>


Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

ordenar archivos de un directorio por la fecha

Publicado por dani (6 intervenciones) el 26/03/2013 09:46:00
hola xve, gracias por tu aporte para ordenar por fechas pero esta vez no funciona.

Aparecen los archivos sin ningun orden y al nombre de cada uno se le añade esto : (31/12/1969 19:00:00)

un segundo intento? Mil gracias!

:(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ordenar archivos de un directorio por la fecha

Publicado por xve (6935 intervenciones) el 26/03/2013 10:09:14
Hola Dani, que extraño, yo lo ejecuto y me funciona perfectamente... el orden debería ser el orden de la fecha... en que sistema operativo lo estas ejecutando? Yo lo he probado sobre un servidor Linux....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

ordenar archivos de un directorio por la fecha

Publicado por dani (6 intervenciones) el 26/03/2013 10:53:39
En windows....y de verdad que me sale lo que te he comentado...por si acaso lo he hecho dos veces y nada....ya te digo que entre parentesis detras del nombre de cada archivo me aparece la fecha (31/12/1969 19:00:00)

No te preocupes si no damos con la solución, a mi ya me valía con ordenarlo alfabeticamente, pero si lo logras solucionar mejor para futuras consultas de la gente.

Gracias y un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar