Foros del Web » Programando para Internet » PHP »

meter datos de un directorio en un array

Estas en el tema de meter datos de un directorio en un array en el foro de PHP en Foros del Web. Buenas. tengo el siguiente codigo: Código PHP: <?php $dir  =  "fichas/" ; if ( is_dir ( $dir )) {     if ( $gd  =  opendir ( $dir )) {         while (( ...
  #1 (permalink)  
Antiguo 15/11/2008, 03:39
Avatar de nanduky  
Fecha de Ingreso: octubre-2008
Ubicación: Corbera del Llobregat
Mensajes: 33
Antigüedad: 15 años, 6 meses
Puntos: 2
meter datos de un directorio en un array

Buenas.

tengo el siguiente codigo:

Código PHP:
<?php
$dir 
"fichas/";

if (
is_dir($dir)) {
    if (
$gd opendir($dir)) {
        while ((
$archivo readdir($gd)) !== false) {
         if (
$archivo != "." && $archivo != "..") {
            echo 
$archivo.'<br>';
            
        }}
        
closedir($gd);
    }
}
?>
que me debuelve:

Código HTML:
<html>

archivo4.txt
archivo1.txt
archivo2.txt
archivo5.txt
archivo3.txt

</html> 
¿Como podria cojer eso datos para meterlos en un array?
Es para poder ordenarlos alfabeticamente los que ya hay mas los que se vallan guardando en el directorio (fichas/).
  #2 (permalink)  
Antiguo 15/11/2008, 03:44
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: meter datos de un directorio en un array

Hola,

En lugar de "imprimirlos" con echo, asignas en esa misma línea los nombres a una variable. Algo como:

Código:
$ficheros[] = $archivo;
Un saludo.
  #3 (permalink)  
Antiguo 15/11/2008, 04:31
Avatar de nanduky  
Fecha de Ingreso: octubre-2008
Ubicación: Corbera del Llobregat
Mensajes: 33
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: meter datos de un directorio en un array

Muchas gracias, Deschamps.

funciona perfecto:

Código PHP:
$dir "fichas/";

if (
is_dir($dir)) {
    if (
$gd opendir($dir)) {
        while ((
$archivo readdir($gd)) !== false) {
            if (
$archivo != "." && $archivo != "..") {
               
$ficheros[] = $archivo;
                }    
            }
        
$cont count($ficheros);
        for(
$i 0;$i $cont;$i++){
        
sort($ficheros);
        echo 
$ficheros[$i].'<br>';
            }
        
closedir($gd);
        }
    } 
Código HTML:
<html>


archivo1.txt
archivo2.txt
archivo3.txt
archivo4.txt
archivo5.txt

</html
  #4 (permalink)  
Antiguo 15/11/2008, 04:48
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: meter datos de un directorio en un array

Sólo una apreciación: si incluyes 'sort' dentro del bucle, estarás ordenando el array en cada ciclo. Y sólo necesitas ordenarlo una vez :). Lo correcto sería usar esa instrucción antes de empezar las iteraciones.

Un saludo.
  #5 (permalink)  
Antiguo 15/11/2008, 05:03
Avatar de nanduky  
Fecha de Ingreso: octubre-2008
Ubicación: Corbera del Llobregat
Mensajes: 33
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: meter datos de un directorio en un array

¿Mejor así?:

Código PHP:
<?php 

$dir 
"fichas/";
if (
is_dir($dir)) {
    if (
$gd opendir($dir)) {
        while ((
$archivo readdir($gd)) !== false) {
            if (
$archivo != "." && $archivo != "..") {
               
$ficheros[] = $archivo;
                }    
            }
        
$cont count($ficheros);
        
sort($ficheros);
        for(
$i 0;$i $cont;$i++){
        echo 
'<option>'.$ficheros[$i].'</option>';
            }
        
closedir($gd);
        }
    }
?>
  #6 (permalink)  
Antiguo 15/11/2008, 07:23
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: meter datos de un directorio en un array



Y para redondear, aunque sea irse offtopic... como regla general, es conveniente que una vez finalizadas las operaciones con ficheros (es decir, si ya no vas a utilizar de nuevo $gd), cierres el gestor de directorios. Así puedes manipular los datos como quieras, sin mantener el recurso abierto.

En tu ejemplo, esto sería usar 'closedir' justo después de terminar el 'while'.

Un saludo.
  #7 (permalink)  
Antiguo 15/11/2008, 15:24
Avatar de nanduky  
Fecha de Ingreso: octubre-2008
Ubicación: Corbera del Llobregat
Mensajes: 33
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: meter datos de un directorio en un array

Tienes razón, pero pensaba que no funcionaria de ese modo el codigo, pero funciona bien.
  #8 (permalink)  
Antiguo 15/11/2008, 15:29
Avatar de nanduky  
Fecha de Ingreso: octubre-2008
Ubicación: Corbera del Llobregat
Mensajes: 33
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: meter datos de un directorio en un array

Tienes razón, pero pensaba que no funcionaria de ese modo el codigo, pero funciona bien.

Si tienes alguna sugerencia mas, soy todo "oidos".

Código PHP:
<?php 

$dir 
"fichas/";
if (
is_dir($dir)) {
    if (
$gd opendir($dir)) {
        while ((
$archivo readdir($gd)) !== false) {
            if (
$archivo != "." && $archivo != "..") {
               
$ficheros[] = $archivo;
                }    
            }
            }
        
closedir($gd);
        
$cont count($ficheros);
        
sort($ficheros);
        for(
$i 0;$i $cont;$i++){
        echo 
'<option>'.$ficheros[$i].'</option>';
        }
    }
        
?>
  #9 (permalink)  
Antiguo 16/11/2008, 03:34
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: meter datos de un directorio en un array

Cita:
(..) Si tienes alguna sugerencia mas, soy todo "oidos" (..)
Pues en realidad... sí. Un par:

Supón que al evaluar las condiciones iniciales, la cadena existe como directorio pero por alguna razón no puedes abrir el gestor de directorio (es decir, evalúa como 'cierto' la primera condición, pero evalúa como 'falso' la segunda por problemas de permisos o un error en el sistema de archivos del sistema). En ese caso, estarían ejecutándose instrucciones que no deberían ejecutarse. Para evitarlo, el segundo 'if' debería incluir también esas instrucciones. De hecho, podrías agrupar ambas condiciones con un 'Y' lógico en un único condicional.

Por otro lado (y ésta ya es sólo una cuestión de gustos), no hay necesidad de contar los elementos del array y definir un bucle 'for' para procesar cada elemento. Podrías ahorrarte esa instrucción (el 'count') si utilizaras una estructura 'foreach' o un 'while' para recorrer el array.

Un saludo.

Edito: Un par de apreciaciones más, en las que no había caído antes (espero que lo interpretes como sugerencias, no como críticas ):

- Si el objetivo es guardar en $ficheros solamente archivos (excluyendo directorios) el condicional que usas para ir añadiendo los elementos al array deberías modificarlo por alguna otra función (por ejemplo, is_file).

- Además, los criterios de ordenación quizás debas tenerlos en cuenta. Me explico: si en un directorio tienes archivos como: texto1.txt, texto2.txt, Texto3.txt y texto10.txt (con minúsculas, mayúsculas, números, etc), la función 'sort' los ordenaría de este modo:

Código:
Texto3.txt
texto1.txt
texto10.txt
texto2.txt
... dando prioridad a las mayúsculas y ordenando estrictamente por orden lexicográfico. Si lo que quieres es que el array siga una ordenación "natural" (sin tener en cuenta mayúsculas y minúsculas, e interpretando los números según lo harías tú), deberías echar un vistazo a la función natcasesort u otras análogas. En este caso, con esa función la salida sería:

Código:
texto1.txt
texto2.txt
Texto3.txt
texto10.txt
Otro saludo.

Última edición por Deschamps; 16/11/2008 a las 08:57
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:49.