Вытяните выделенные изображения из папки – покажите изображение + имя файла (разделите часть имени файла + расширение файла)

на основе исходного кода в этом вопросе и исправления Tims там (ответ 1) Я пытаюсь добиться следующего:

У меня есть папка «img», содержащая изображения следующим образом:

  • image_123.jpg
  • image_123_alternate.jpg
  • image_456.jpg
  • image_456_alternate.jpg
  • image_789.jpg
  • image_789_alternate.jpg
  • и так далее…
    (Примечание: все изображения имеют одинаковый размер 200px / 200px)

При перемещении из папки «img» простая HTML-страница должна отображать изображения и имена файлов следующим образом:

Фактические изображения, которые содержат часть «_alternate» в их имени файла (и только они) + имя файла изображения, не содержащее часть «_alternate» (без расширения файла) под изображением в текстовом поле. Все пары должны быть вытащены в алфавитном порядке. В приведенном ниже примере жирные заглавные буквы указывают фактическое изображение, которое будет отображаться:

IMAGE_123_ALTERNATE
textbox: "image_123"

IMAGE_456_ALTERNATE
textbox: "image_456"

IMAGE_789_ALTERNATE
textbox: "image_789"

Это то, что у меня есть до сих пор, но это отображает все изображения и имена файлов:

<?php $dir = opendir("img"); while (($file = readdir($dir)) !== false) { echo "<a href='img/".$file."' target='_blank'> <img src='img/".$file."'width='200' height='200' /></a><br />"; echo "<textarea>$file</textarea><br /><br />"; } closedir($dir); ?> 

Любая помощь приветствуется!

Большое спасибо!

Solutions Collecting From Web of "Вытяните выделенные изображения из папки – покажите изображение + имя файла (разделите часть имени файла + расширение файла)"

Этот код должен отображать список всех изображений в алфавитном порядке (с использованием функции GLOB PHP).

Затем он выводит изображение HTML (приводящее к «_alternate» изображению) и имени файла изображения (без пути, «_alternate» или «extension»).

 <?php foreach (glob("img/*_alternate.jpg") as $file) { $filename_parts = pathinfo($file); $filename = $filename_parts['filename']; $filename = str_replace("_alternate", "", $filename); echo "<div>"; echo "<img src=\"/$file\" width=\"200\" height=\"200\" />"; echo "<p>$filename</p>"; } ?> 

Я разбил функции, которые находят новое имя файла и части, которые выводят код HTML, чтобы было легче читать и понимать, вы могли бы объединить их в одну функцию, если хотите.

Просто через оператор if в цикле while. Проверьте, содержит ли имя файла альтернативное или нет. Если он не содержит альтернативного запуска, тот же код заменяет расширение файла на «_alternate.ext», сохраняя при этом текстовую область одинаковой. Если он содержит alternalte, ничего не делайте. Таким образом, вы обрабатываете только половину файлов.

 $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);