Foros del Web » Programando para Internet » PHP »

Como aplicar array_reverse

Estas en el tema de Como aplicar array_reverse en el foro de PHP en Foros del Web. Hola gente: Tengo el siguiente problema, estoy haciendo una sencillisima galeria de imagenes, que las subo con uploading a dos directorios una con tamaño normal ...
  #1 (permalink)  
Antiguo 09/07/2006, 17:11
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 13 años
Puntos: 0
Como aplicar array_reverse

Hola gente:
Tengo el siguiente problema, estoy haciendo una sencillisima galeria de imagenes, que las subo con uploading a dos directorios una con tamaño normal y otra una copia mas chica.
Para visualizar la galeria dispongo el codigo que pongo a continuacion que muestra los elementos de la carpeta "thumbs" y lo que necesitaria es ayuda para que en vez de que me muestra al principio la imagen mas vieja que subi, me muestra la mas nueva, creo que es con esto de array_reverse pero no se donde o como aplicarlo. Dejo el codigo y agradezco desde ya.

Código:
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<?

// CONFIGURATION

        $cols = 5; // columns number
        $table_bg_color = "black";  // table background color
        $table_border = "0";  // table border size
        $table_width = "";  // table width

// DO NOT EDIT BELOW

        $i =1;
        $files = array ();
        $myDirectory = opendir("imgs/thumbs");
        echo "<table width='$table_width' bgcolor = '$table_bg_color' border ='$table_border' cellpadding='5' cellspacing='0'><tr>";
        while ($file = readdir($myDirectory)) {

        if (($file != ".") && ($file != "..") && ($file != "index.php") && !(is_dir("imgs/$file")) )
        {
    $files[] = $file;
        if (is_int($i / $cols)) {
        list($width, $height) = getimagesize("imgs/$file");
        echo "<td align='center'>";
        ?> <a href="#" onClick="MyWindow=window.open('viewer.php?file=<?php echo $file;?>','MyWindow','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resizable=no,width=<?php echo "$width";?>,height=<?php echo "$height";?>,left=20,top=20'); return false;"> 
<?
        echo "<img src='imgs/thumbs/$file' border='0'></a>";
        echo "</td></tr><tr>";
        }
        else
        {
        list($width, $height, $type, $attr) = getimagesize("imgs/$file");
        echo "<td align='center'>";
        ?> </a><a href="#" onClick="MyWindow=window.open('viewer.php?file=<?php echo $file;?>','MyWindow','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resizable=no,width=<?php echo "$width";?>,height=<?php echo "$height";?>,left=20,top=20'); return false;"> 
<?
        echo "<img src='imgs/thumbs/$file' border='0'></a>";
        echo "</td>";
        }
        $i++;
        }
        }
        echo "</tr></table>";
        closedir($myDirectory);



                ?> </a> 
</body>
</html>
  #2 (permalink)  
Antiguo 10/07/2006, 08:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En $files tienes tu array con tus archivos que lees de tu directorio, ahí debes aplicar array_reverse() y luego recorrer el array nuevo generado u ordenado para presentar tus archivos en ese orden.

Lo que debes dejar ese código que sólo registre (cree) entradas en ese array $files ($files[]=$file) ... y no presente ahí su link hacia el archivo (ni arme la tabla HTML que ahí compone) . . en general . .sólo toma el código que obtiene los archivos del directorio .. luego tienes que leer ese array $files con un bucle tipo foreach() por ejemplo y ahí generar tu link hacia los archivos (aplicando antes array_reverse())

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 10/07/2006, 12:15
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 13 años
Puntos: 0
Gracias por responder. Algo de lo me comentas tuve oportunidad de leer cuando busque sobre este tema, por supuesto tus comentarios son mas especificos. El tema en mi caso es que no tengo la menor idea de como aplicarlos, y no entendi bien que me decis de la tabla, (te aclaro que las imagenes necesito verlas como galeria por eso esta)...bueno en realidad agradezco si alguien, con los datos que hay, me ayuda en la implementacion, yo ya llegué hasta donde podia.
Gracias nuevamente.

Última edición por eximer; 10/07/2006 a las 12:23
  #4 (permalink)  
Antiguo 10/07/2006, 12:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El problema que tienes es que estás tratando con un código ya hecho que desconoces que haces por completo ..

Te comento para que lo entiendas que tu código hace dos cosas:
1) recorre el directorio en busca de archivos de tipo imagen
2) genera una tabla con X/y Filas/columnas.

Puedes tomar ese mismo código para la presentación de tus archivos, pero antes recorre tu directorio y genera el array que necesitas con los nombres de tus archivos para aplicar "array_reverse" o lo que necesites

// leer los nombres de archivos hacia un array:
Código PHP:
$files = array ();
$myDirectory opendir("imgs/thumbs");
        
while (
$file readdir($myDirectory)) {

   if ((
$file != ".") && ($file != "..") && ($file != "index.php") && !(is_dir("imgs/$file")) ){

    
// aquí los acomulas en el array $files ...
    
$files[] = $file;
     }
}
closedir($myDirectory); 
El código anterior te generó un array $files con tus archivos .. Ahora tocará "ordenarlo" como gustes:

Código PHP:
$archivos array_reverse($files);
// me deshago de $files (mi array original) .. no lo necesito .. ya lo tengo en $archivos y ordenado como necesito.
unset($files); 
Y luego recorrer ese array para ir componiendo tu tabla HTML para darle el formato ..

Código PHP:
<?
$i 
=1;
        echo 
"<table width='$table_width' bgcolor = '$table_bg_color' border ='$table_border' cellpadding='5' cellspacing='0'><tr>";
        foreach (
$archivos as $archivo) {

        if (
is_int($i $cols)) {
        list(
$width$height) = getimagesize("imgs/$archivo");
        echo 
"<td align='center'>";
        
?> <a href="#" onClick="MyWindow=window.open('viewer.php?file=<?php echo $archivo;?>','MyWindow','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resizable=no,width=<?php echo "$width";?>,height=<?php echo "$height";?>,left=20,top=20'); return false;"> 
<?
        
echo "<img src='imgs/thumbs/$archivo' border='0'></a>";
        echo 
"</td></tr><tr>";
        }
        else
        {
        list(
$width$height$type$attr) = getimagesize("imgs/$archivo");
        echo 
"<td align='center'>";
        
?> </a><a href="#" onClick="MyWindow=window.open('viewer.php?file=<?php echo $archivo;?>','MyWindow','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resizable=no,width=<?php echo "$width";?>,height=<?php echo "$height";?>,left=20,top=20'); return false;"> 
<?
        
echo "<img src='imgs/thumbs/$archivo' border='0'></a>";
        echo 
"</td>";
        }
        
$i++;
        }
        }
        echo 
"</tr></table>";
Más o menos sería así .. no lo he probado ni revisado ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 10/07/2006, 13:35
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 13 años
Puntos: 0
Gracias Cluster !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!
Le agregue los datos de las variables que tenia y anduvo perfecto para mis necesidades. Asi quedo el codigo

Código:
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#000000">
<?
$files = array (); 
$myDirectory = opendir("imgs/thumbs"); 
         
while ($file = readdir($myDirectory)) { 

   if (($file != ".") && ($file != "..") && ($file != "index.php") && !(is_dir("imgs/$file")) ){ 

    // aquí los acomulas en el array $files ... 
    $files[] = $file; 
     } 
} 
closedir($myDirectory);
$archivos = array_reverse($files); 
// me deshago de $files (mi array original) .. no lo necesito .. ya lo tengo en $archivos y ordenado como necesito. 
unset($files); 
?> <? 
        $cols = 5; // columns number
        $table_bg_color = "black";  // table background color
        $table_border = "0";  // table border size
        $table_width = "100%";  // table width
$i =1; 
        echo "<table width='$table_width' bgcolor = '$table_bg_color' border ='$table_border' cellpadding='5' cellspacing='0'><tr>"; 
        foreach ($archivos as $archivo) { 

        if (is_int($i / $cols)) { 
        list($width, $height) = getimagesize("imgs/$archivo"); 
        echo "<td align='center'>"; 
        ?> <a href="#" onClick="MyWindow=window.open('viewer.php?file=<?php echo $archivo;?>','MyWindow','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resizable=no,width=<?php echo "$width";?>,height=<?php echo "$height";?>,left=20,top=20'); return false;"> 
<? 
        echo "<img src='imgs/thumbs/$archivo' border='0'></a>"; 
        echo "</td></tr><tr>"; 
        } 
        else 
        { 
        list($width, $height, $type, $attr) = getimagesize("imgs/$archivo"); 
        echo "<td align='center'>"; 
        ?> </a><a href="#" onClick="MyWindow=window.open('viewer.php?file=<?php echo $archivo;?>','MyWindow','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resizable=no,width=<?php echo "$width";?>,height=<?php echo "$height";?>,left=20,top=20'); return false;"> 
<? 
        echo "<img src='imgs/thumbs/$archivo' border='0'></a>"; 
        echo "</td>"; 
        } 
        $i++; 
        } 
        echo "</tr></table>";
?></a> 
</body>
</html>
  #6 (permalink)  
Antiguo 10/07/2006, 13:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Me alegro que te funcione. Ahora si te fijas bien .. puedes hacer cosas interesantes como otro tipo de ordenamiento (por nombre por ejemplo) usando alguna otra función de ordenamiento de arrays (www.php.net/array)

Si quieres ordenar por otro criterio (por ejemplo por tamaño, peso .. etc) cosa que obtiene -según- presentas la imagen .. deberías almacenar esos datos en otro array (multidimensional) para poder hacer ese tipo de ordenamientos.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 10/07/2006, 13:59
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 13 años
Puntos: 0
Perfecto Cluster, lo tengo en cuenta. Concretamente esta parte del codigo la necesitaba porque esta destinada a una simple galeria de imagenes para la web de una disco (fotos de gente) y me interesaba que al cargarlas se vieran al principio de la pagina las mas actuales.
He logrado hacer una galeria con 3 archivos. El uploading me redimensiona y me guarda en una carpeta una miniatura de 120 pixeles de ancho por alto proporcional y en otra carpeta una copia de 400 pixeles por alto proporcional (hace las dos copias en un solo paso). Con este script era el tema de mostrarlas, desde la mas nueva hacia la mas vieja, lo ideal seria paginarlas por la cantidad (cosa que no tengo idea con este tipo de script, si con bd) pero me conformo como está. Thanks!!
  #8 (permalink)  
Antiguo 10/07/2006, 14:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Con este script era el tema de mostrarlas, desde la mas nueva hacia la mas vieja, lo ideal seria paginarlas por la cantidad (cosa que no tengo idea con este tipo de script, si con bd) pero me conformo como está. Thanks!!

El paginado o sistema que debes buscar es "paginar un array" .. (creo que hay temas que comentan el tema) .. En ese caso en lugar de un "foreach()" para presentar tus archivos usarías un for() para poder indicar de cierto indice a tal indice que mostrar del rango total de elementos del array ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 10/07/2006, 14:22
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 13 años
Puntos: 0
Ok Cluster, veo que hay por ahi sin bd.
Gracias.
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 14:46.