Как искать изображения по имени внутри папки?

У меня есть таблица MySQL с колонкой «раунды», и каждый «раунд» имеет свои собственные фотографии. Пример round1 имеет фотографии с начала = 380 end = 385. Это означает, что у него есть 6 фотографий, а имя фотографий содержит 380 381 382 383 384 или 385.

Я использую этот код PHP для отображения фотографий из всей папки:

$dirname = "photos"; $images = scandir($dirname); sort($images,SORT_NUMERIC); krsort($images); $ignore = Array(".", ".."); foreach($images as $curimg){ if(!in_array($curimg, $ignore)) { echo "<p align=\"center\">Photo $curimg</p>"; echo "<img class=\"img-responsive\" src=\"". $dirname . '/' . $curimg ."\">"; } } 

Мне нужна помощь в настройке моего кода для поиска только фотографий из папки, содержащейся внутри их имени 380,381,382,383,384 или 385.

Я думаю, что код ниже может это сделать, но я не знаю, как настроить его с помощью первого кода.

 $start=380; $end=385; for($i=$start; $i<=$end; $i++) { echo "$i<br>"; } 

Это похоже на задание для glob , которое возвращает массив имен файлов, соответствующих указанному шаблону. Я знаю, что другой ответ только что был опубликован, но давайте представим альтернативу регулярному выражению.

Согласно верхнему комментарию на странице документов, вы можете сделать что-то вроде этого:

 <?php $dirname = "photos"; $filenames = glob("$dirname/*{380,381,382,383,384,385}*", GLOB_BRACE); foreach ($filenames as $filename) { echo $filename . "<br />"; } ?> 

Параметры GLOB_BRACE позволяют вам указывать список значений в фигурных скобках, а звездочки вокруг них позволяют показывать эти числа в любом месте имени файла. Затем вы можете перебирать возвращаемый массив и делать все, что хотите, с $filename .

Вы можете использовать свой пример for цикла для автоматической сборки строки для перехода в glob .

Вот результат, когда я запустил это в тестовом каталоге, который я сделал:

 photos/380.zip photos/asdf382ghj.txt photos/385.bmp 

Обратите внимание, что другой файл, который я там a386b.xlsx , a386b.xlsx , не соответствует шаблону и не отображается в списке.

Используйте функцию glob ()

  <?php print_r(glob("*.txt")); ? 

Вывод кода выше может быть:

 Array ( [0] => target.txt [1] => source.txt [2] => test.txt [3] => test2.txt ) 

Так что для вашего случая это может быть что-то вроде:

 $files= glob("38[0-5].jpg");