Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/05/2014, 14:09
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: detalles: mostrar imágenes de una carpeta

El problema surge al momento en el que alimentas a la variable $archivo, pues cuando lo recorres con el bucle foreach, además, no sé por qué restas 2 al total, supongo que querrás recorrer al array desde la posición inicial (cero), entonces, solamente debes de restar 1.

Para tomar a las imágenes del directorio, lo haría así:

Código PHP:
Ver original
  1. function filtrar ($imagen){
  2.     $tipos = array('jpg', 'jpeg', 'png', 'gif');
  3.     return in_array(substr($imagen, strripos($imagen, '.') + 1), $tipos);
  4. }
  5.  
  6. $imagenes = array_filter(array_diff(scandir('gallery/'), array('..', '.')), 'filtrar');

De este modo, tomo a todos los archivos del directorio gallery (recordando que scandir devuelve un array) y lo filtro con la función array_diff para así obtener al conjunto de archivos que no coincidan con los elementos del segundo array que paso como parámetro. Luego, hago un segundo filtro, esta vez con la función array_filter, a la cual le paso el array resultante de la operación anterior y la función filtrar, la cual devuelve únicamente a los archivos cuya extensión corresponda con alguna de las dadas en el array $tipos. Para esto, hago uso de las siguientes funciones:

Te sugiero revisar cada enlace para que sepas qué hace cada una de esas funciones.

Como $imagenes es un array con todas las imágenes filtradas, solo es cuestión de que las imprimas mediante un bucle.

Código PHP:
Ver original
  1. <?php
  2. foreach ($imagenes as $img){
  3. ?>
  4.     <img src = 'gallery/<?=$img?>' /> <br />
  5. <?php
  6. }

Mientras que el total de imágenes, lo obtienes utilizando la función count aplicada al array $imagenes.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand