У меня есть таблица 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");