Я делаю галерею в jssor, а слайды создаются путем чтения каталога и написания div для каждого изображения с использованием сценария PHP. Под изображением отображается заголовок с именем исполнителя (это всегда одно и то же), за которым следует имя файла без расширения.
Это то, что я до сих пор:
<?
$dir = 'Photo/Paintings';
$files = scandir($dir);
sort($files);
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
echo '<div>
<img u="image" style="max-height:460px;" src="Photo/Paintings/'.$file.'" />
<img u="thumb" src="Photo/Paintings/'.$file.'" />';
$withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $file);
echo '<div u="caption" style="position: absolute; top: 470px; left: 0px; height: 10px; text-align: center;">
ARTISTX - '.$withoutExt.'
</div>
</div>';
}
}
?>
Эти изображения должны быть в определенном порядке, поэтому моя идея заключалась в добавлении числа в начале каждого имени файла, например, так #5-Picture of tree.jpg
, Мой вопрос, как мне удалить это #5
часть от отображения в подписи, а?
Кроме того, есть ли лучший способ определить порядок этих файлов? Теперь я понимаю, что моя идея не сработает даже очень хорошо, поскольку № 1 в алфавитном порядке будет сопровождаться № 11 и № 12 вместо № 2. Я мог бы обойти это, используя комбинацию с буквами 1А, 1В, 1С, 2А и т. Д.
Это вступает в силу, только если имя файла начинается с цифры:
$str = preg_replace('/^\\d+-/', null, $fileName);
Файлы, которые не начинаются с #{number}-
не будет зависеть от этого процесса пошива.
Для вашей проблемы сортировки. Положить начинку 0
до. Так что используйте 01
, 02
… и так далее до 99
,
Кстати. Не используйте короткие теги PHP. Всегда используйте <?php
в начале блока PHP.
Вы можете получить только часть строки:
$str = substr($str, 3);
Или вы удалите часть до -
явный:
$ex = explode("-", $str);
unset($ex[0]);
$str = implode("-", $ex);
Второй способ лучше, если первая часть может иметь более 3 символов.
Кроме того, есть ли лучший способ определить порядок этих файлов? Теперь я понимаю, что моя идея не сработает даже очень хорошо, поскольку № 1 в алфавитном порядке будет сопровождаться № 11 и № 12 вместо № 2. Я мог бы обойти это, используя комбинацию с буквами 1А, 1В, 1С, 2А и т. Д.
Использовать этот:
$myFiles = Array();
foreach($files as $file){
// ...
$myFiles[str_replace("#", "", explode("-", $file)[0]))] = $file;
}
ksort($myFiles);
foreach($myFiles as $file){
// display
}
Чтобы ответить на ваш второй вопрос, вам не нужно переходить на 1A, 2B … есть что-то вроде natsort natsort