Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Listar directorios por una letra determinada

Estas en el tema de Listar directorios por una letra determinada en el foro de PHP en Foros del Web. Buenas tardes: - Como puedo hacer para listar los directorios, que se encuentran en: Categorias/Camp_Primera_Division que inician con una letra determinada, por ejemplo letra A. ...
  #1 (permalink)  
Antiguo 08/09/2015, 10:11
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Listar directorios por una letra determinada

Buenas tardes:

- Como puedo hacer para listar los directorios, que se encuentran en: Categorias/Camp_Primera_Division que inician con una letra determinada, por ejemplo letra A. Mi código es este:

Código PHP:
<?php    
$columns 
2;    
    
    
$directorio opendir("Categorias/Camp_Primera_Division");    
    
# ponemos los valores en un array para poder ordenarlos 
    
$ele = array(); 
    while (
$archivo readdir($directorio)) 
    { 
        if (
$archivo != "." && $archivo != ".."
        { 
           
$nombreArch ucwords($archivo);  
           
$ele[] = $nombreArch
        } 
    } 

closedir($directorio);    
asort ($ele);   
     
echo 
"<table width='100%' align='center'";    
echo 
"border='1' cellpadding='3' cellspacing='3'>";    
     
$z 0;    
     
    foreach (
$ele as $arc)    
        {    
        if (
$z $columns == 0)    
        {    
            echo 
"<tr>";    
        }    
        echo 
'<td><a target=_blank href="'.$ruta.'Categorias/Camp_Primera_Division/'.$arc.'">'.$arc.'</a></td>';    
        
$z++;    
     
        if (
$z $columns == 0)    
        {    
            echo 
"</tr>";    
        }    
        }    
     
echo 
'</table>';    
?>
  #2 (permalink)  
Antiguo 08/09/2015, 10:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Listar directorios por una letra determinada

Pues en el mismo while() donde comparas debes hacer una comparación adicional, con substr() puedes obtener el primer carácter:
Código PHP:
Ver original
  1. if ($archivo != "." && $archivo != ".." && substr($archivo, 0, 1) == "A") {
  2.  // OK
  3. }
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 08/09/2015, 12:22
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listar directorios por una letra determinada

Hola, pateketrueke:

Muchas gracias, quedo perfecto, buscando en el foro conseguí quitar el index.html que tb aparecia en el listado del directorio, quedo así:

Código PHP:
<?php   
$columns 
2;   
   
    
$directorio opendir("Categorias/Camp_Primera_Division");   
    
# ponemos los valores en un array para poder ordenarlos
    
$ele = array();
    while (
$archivo readdir($directorio))
    {
        if (
$archivo != "." && $archivo != ".." && $archivo != "index.html" && substr($archivo01) == "A"
    {
           
$nombreArch ucwords($archivo); 
           
$ele[] = $nombreArch;
        }
    }

closedir($directorio);   
asort ($ele);  
    
echo 
"<table width=890px align='center'";   
echo 
"border='0' cellpadding='3' cellspacing='3'>";   
    
$z 0;   
    
    foreach (
$ele as $arc)   
        {   
        if (
$z $columns == 0)   
        {   
            echo 
"<tr>";   
        }   
        echo 
'<td><a href="'.$ruta.'Categorias/Camp_Primera_Division/'.$arc.'" target=_blank>'.$arc.'</a></td>';   
        
$z++;   
    
        if (
$z $columns == 0)   
        {   
            echo 
"</tr>";   
        }   
        }   
    
echo 
'</table>';   
?>
- Una pregunta, en el listado de directorios, los links aparecen así:
Boca_Juniors, River_Plate; San_Lorenzo porque el directorio tiene esos underlines.
Como puedo sacarlos, para que cuando los liste se reemplazen por un espacio en blanco tipo Boca Juniors, River Plate, San Lorenzo?
  #4 (permalink)  
Antiguo 08/09/2015, 12:35
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listar directorios por una letra determinada

Leyendo en manual encontré esto:

str_replace() puede buscar y reemplazar cadenas y caracteres dentro de un string o array.

Ahora tengo q ver como puedo adaptarlo.
  #5 (permalink)  
Antiguo 08/09/2015, 13:20
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listar directorios por una letra determinada

Intente con esto

Código PHP:
// quitar underline
$archivo str_replace("_"," ",$archivo); 
- No funciona
  #6 (permalink)  
Antiguo 08/09/2015, 14:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Listar directorios por una letra determinada

Cita:
Iniciado por Marcos315 Ver Mensaje
Intente con esto

Código PHP:
// quitar underline
$archivo str_replace("_"," ",$archivo); 
- No funciona
¿Podrías mostrar el código completo con los cambios?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 08/09/2015, 14:34
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listar directorios por una letra determinada

Este es el cód:

Código PHP:
<?php    
$columns 
2;    
    
    
$directorio opendir("Categorias/Camp_Primera_Division");    
    
# ponemos los valores en un array para poder ordenarlos 
    
$ele = array(); 
    while (
$archivo readdir($directorio)) 
    { 
        if (
$archivo != "." && $archivo != ".." && $archivo != "index.html" && substr($archivo01) == "A")  
    { 
           
$nombreArch ucwords($archivo);  
           
$ele[] = $nombreArch
           
           
// quitar underline
           
$archivo str_replace("_"," ",$archivo);             
        } 
    } 

closedir($directorio);    
asort ($ele);   
     
echo 
"<table width=890px align='center'";    
echo 
"border='0' cellpadding='3' cellspacing='3'>";    
     
$z 0;    
     
    foreach (
$ele as $arc)    
        {    
        if (
$z $columns == 0)    
        {    
            echo 
"<tr>";    
        }    
        echo 
'<td><a href="'.$ruta.'Categorias/Camp_Primera_Division/'.$arc.'" target=_blank>'.$arc.'</a></td>';    
        
$z++;    
     
        if (
$z $columns == 0)    
        {    
            echo 
"</tr>";    
        }    
        }    
     
echo 
'</table>';    
?>
  #8 (permalink)  
Antiguo 08/09/2015, 14:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Listar directorios por una letra determinada

Pues así como lo hiciste jamás te va a funcionar, es decir, el flujo de un script es de arriba hacia abajo.

El error es aplicas la función str_replace() después de que ya agregaste el archivo, entonces así ya no funciona.

Cambiar el orden de las acciones: primero aplica el cambio, luego agregas.

Código PHP:
Ver original
  1. // quitar underline
  2. $archivo = str_replace("_"," ",$archivo);  
  3.  
  4. $nombreArch = ucwords($archivo);  
  5. $ele[] = $nombreArch;
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 08/09/2015, 15:16
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listar directorios por una letra determinada

jaja, el que sabe sabe, gracias !!

Quedo así:

Código PHP:
<?php     
$columns 
2;     
     
    
$directorio opendir("Categorias/Camp_Primera_Division");     
        
# ponemos los valores en un array para poder ordenarlos  
        
$ele = array();  
    while (
$archivo readdir($directorio))  
        {  
    if (
$archivo != "." && $archivo != ".." && $archivo != "index.html" && substr($archivo01) == "A")   
        {  
        
// quitar underline
        
$archivo str_replace("_"," ",$archivo);  
        
$nombreArch ucwords($archivo);  
        
$ele[] = $nombreArch;             
        }  
        }  

closedir($directorio);     
asort ($ele);    
      
echo 
"<table width=890px align='center'";     
echo 
"border='0' cellpadding='3' cellspacing='3'>";     
      
$z 0;     
      
    foreach (
$ele as $arc)     
        {     
        if (
$z $columns == 0)     
        {     
            echo 
"<tr>";     
        }     
        echo 
'<td><a href="'.$ruta.'Categorias/Camp_Primera_Division/'.$arc.'" target=_blank>'.$arc.'</a></td>';     
        
$z++;     
      
        if (
$z $columns == 0)     
        {     
            echo 
"</tr>";     
        }     
        }     
      
echo 
'</table>';     
?>
Al listar el directorio la ruta quedo con espacios

- Boca Juniors al clicar aparece así misitio.com/Categorias/Camp_Primera_Division/Boca Juniors

Yo quería tirar el _ del ítem y reemplazarlo por un espacio en blanco, y que la ruta mantenga los underlines tipo:

- Boca Juniors al clicar tendría que aparecer misitio.com/Categorias/Camp_Primera_Division/Boca_Juniors

Se puede modificar ?
  #10 (permalink)  
Antiguo 08/09/2015, 15:40
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Listar directorios por una letra determinada

Cita:
Se puede modificar ?
Entonces el str_replace() debes aplicarlo al momento de mostrar el dato, no al momento de agregarlo a la lista.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 08/09/2015, 15:58
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listar directorios por una letra determinada

- Al momento de mostrarlo, seria antes de add la url ?

Código PHP:
<?php     
$columns 
2;     
     
    
$directorio opendir("Categorias/Camp_Primera_Division");     
        
# ponemos los valores en un array para poder ordenarlos  
        
$ele = array();  
    while (
$archivo readdir($directorio))  
        {  
    if (
$archivo != "." && $archivo != ".." && $archivo != "index.html" && substr($archivo01) == "A")   
        {  
        
$nombreArch ucwords($archivo);  
        
$ele[] = $nombreArch;             
        }  
        }  

closedir($directorio);     
asort ($ele);    
      
echo 
"<table width=890px align='center'";     
echo 
"border='0' cellpadding='3' cellspacing='3'>";     
      
$z 0;     
      
    foreach (
$ele as $arc)     
        {     
        if (
$z $columns == 0)     
        {     
            echo 
"<tr>";     
        } 
        
// quitar underline
        
$archivo str_replace("_"," ",$archivo);  
        echo 
'<td><a href="'.$ruta.'Categorias/Camp_Primera_Division/'.$arc.'" target=_blank>'.$arc.'</a></td>';     
        
$z++;     
      
        if (
$z $columns == 0)     
        {     
            echo 
"</tr>";     
        }     
        }     
      
echo 
'</table>';     
?>
Así ? o tengo que modificar otras líneas ?
  #12 (permalink)  
Antiguo 09/09/2015, 10:09
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Listar directorios por una letra determinada

Código PHP:
Ver original
  1. <?php
  2.  define(COLUMNS_COUNT, 2);
  3.  define(DIRECTORY_PATH, "Categorias/Camp_Primera_Division");
  4.  
  5.  $files = array_values(array_filter(scandir(DIRECTORY_PATH), function($file_name) {
  6.      return (strtoupper($file_name[0]) === "A");
  7.  }));
  8.  
  9.  if(count($files) === 0) {
  10.      echo "No hay archivos.";
  11.  } else {
  12.      echo "<table>
  13.             <tr>";
  14.  
  15.      foreach ($files as $idx => $file_name)
  16.          echo ($idx !== 0 && $idx % COLUMNS_COUNT === 0 ? "</tr><tr>" : "").
  17.               "<td>
  18.                 <a href=\"{DIRECTORY_PATH}/$file_name\" target=\"_blank\">".str_replace("_", " ", $file_name)."</a>
  19.               </td>";
  20.  
  21.      echo str_repeat("<td></td>", $idx % COLUMNS_COUNT)."
  22.             </tr>
  23.         <table>";
  24.  }
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #13 (permalink)  
Antiguo 09/09/2015, 12:00
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listar directorios por una letra determinada

Hola NSD, gracias por responder tb. Una pregunta me aparece este error.

Cita:
Parse error: syntax error, unexpected T_FUNCTION in /home/xx/public_html/mi sitio/yyyy.php on line 5
  #14 (permalink)  
Antiguo 09/09/2015, 12:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Listar directorios por una letra determinada

Cita:
Iniciado por Marcos315 Ver Mensaje
Hola NSD, gracias por responder tb. Una pregunta me aparece este error.
¿Qué versión de PHP tienes instalada?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 09/09/2015, 13:15
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listar directorios por una letra determinada

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Qué versión de PHP tienes instalada?
- Hola, tengo esta PHP Version 5.2.17
  #16 (permalink)  
Antiguo 09/09/2015, 13:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Listar directorios por una letra determinada

Pues ese es un problema, el código de NSD utiliza closures, que se introdujeron en la versión PHP 5.3 y así.

http://php.net/manual/es/functions.anonymous.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #17 (permalink)  
Antiguo 09/09/2015, 14:25
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listar directorios por una letra determinada

- No se si puedo pedir la actualización a mi servidor.
  #18 (permalink)  
Antiguo 09/09/2015, 14:38
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listar directorios por una letra determinada

Vos me habias dicho:

Cita:
Iniciado por pateketrueke Ver Mensaje
Entonces el str_replace() debes aplicarlo al momento de mostrar el dato, no al momento de agregarlo a la lista.
Entonces lo que hice fue ver la estructura del código que NSD me paso y intente adaptar el cambio en la ruta que el hizo que era lo que vos me sugeriste pero que yo no había entendido pq soy nuevo, entonces intente y consegui esto:

- Funciona perfecto. Lo dejo acá, tal vez le sirva a alguien tb:

Código PHP:
<?php      
    $columns 
2;         
    
$directorio opendir("Categorias/Camp_Primera_Division");      
        
# ponemos los valores en un array para poder ordenarlos   
        
$ele = array();   
    while (
$archivo readdir($directorio))   
        {   
    if (
$archivo != "." && $archivo != ".." && $archivo != "index.html" && substr($archivo01) == "A")    
        {   
        
$nombreArch ucwords($archivo);   
        
$ele[] = $nombreArch;              
        }   
        }   
    
closedir($directorio);      
    
asort ($ele);            
    echo 
"<table width=500px align='center'";      
    echo 
"border='0' cellpadding='3' cellspacing='3'>";            
    
$z 0;         
    foreach (
$ele as $arc)      
        {      
    if (
$z $columns == 0)      
        {      
    echo 
"<tr>";      
        }      
    echo 
'<td><a href="'.$ruta.'Categorias/Camp_Primera_Division/'.$arc.'" target=_blank>'.str_replace("_"" "$arc).'</a></td>';      
    
$z++;      
       
    if (
$z $columns == 0)      
        {      
    echo 
"</tr>";      
        }      
        }             
echo 
'</table>';      
?>
- Quiero agracerles tanto a pateketrueke como a NSD, por su paciencia, dedicación y sobretodo por su tiempo. Es bueno ver que personas que saben mucho nos dan la posibilidad de aprender de ellos. Muchas Gracias !!

Etiquetas: directorios, especifico, letra, lista
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 04:57.