Extraiga imágenes dedicadas de la carpeta – muestre la imagen + nombre del archivo (parte de la cinta del nombre del archivo + extensión del archivo)

basado en el código original en esta pregunta y la corrección de Tims allí (respuesta 1), estoy tratando de lograr lo siguiente:

Tengo una carpeta “img” que contiene imágenes de la siguiente manera:

  • image_123.jpg
  • image_123_alternate.jpg
  • image_456.jpg
  • image_456_alternate.jpg
  • image_789.jpg
  • image_789_alternate.jpg
  • y así…
    (Nota: todas las imágenes tienen el mismo tamaño de 200px / 200px)

Al extraer de la carpeta “img”, la página HTML simple debe mostrar las imágenes y los nombres de archivo de la siguiente manera:

Las imágenes reales que contienen la parte “_alternate” en su nombre de archivo (y solo estas) + el nombre de archivo de la imagen que no contiene la parte “_alternate” (sin la extensión de archivo) debajo de la imagen en un cuadro de texto. Todos los pares deben ser tirados en orden alfabético. En el siguiente ejemplo, las letras mayúsculas en negrita indican la imagen real que se mostrará:

IMAGE_123_ALTERNATE
cuadro de texto: “image_123”

IMAGE_456_ALTERNATE
cuadro de texto: “image_456”

IMAGE_789_ALTERNATE
cuadro de texto: “image_789”

Esto es lo que tengo hasta ahora, pero esto muestra todas las imágenes y nombres de archivo:

<?php $dir = opendir("img"); while (($file = readdir($dir)) !== false) { echo " 
"; echo "

"; } closedir($dir); ?>

¡Cualquier ayuda sería muy apreciada!

¡Muchas gracias!

Este código debería mostrar una lista de todas las imágenes en orden alfabético (usando la función GLOB de PHP).

A continuación, muestra una imagen HTML (que lleva a la imagen “_alternate”) y el nombre de archivo de la imagen (sin la ruta, “_alternate” o “extensión”).

 < ?php foreach (glob("img/*_alternate.jpg") as $file) { $filename_parts = pathinfo($file); $filename = $filename_parts['filename']; $filename = str_replace("_alternate", "", $filename); echo "
"; echo ""; echo "

$filename

"; } ?>

He desglosado las funciones que encuentran el nuevo nombre de archivo y las partes que producen el código HTML para que sea más fácil de leer y comprender, y podrías fusionarlas en una función si así lo deseas.

Solo a través de una instrucción if en su ciclo while. Compruebe si el nombre del archivo contiene o no alternar. Si no contiene alternativas, ejecute su mismo código reemplazando la extensión del archivo con “_alternate.ext” mientras mantiene el área de texto igual. Si contiene alternalte, no haga nada. De esa manera solo procesas la mitad de los archivos.

 $files = new \DirectoryIterator('img'); // < - this should be the full absolute path! $images = array(); // pick up jpg images that end in 'alternate' foreach($files as $file){ $name = $file->getBasename('.jpg'); if(strripos($name, 'alternate') === (strlen($name) - 9)) $images[] = $name; } // sort them sort($images, SORT_STRING); // and do your thing here with $images... var_dump($images);