Ряд глобусов PHP - маленькая проблема, почему?

1

У меня есть небольшая проблема для отображения фотографий по диапазону из папки.

Мой текущий код PHP:

$start = 0007;
$end = 0015;

$filenames = glob("$dirname/*{" . implode(",", range($start, $end)) . "}*", GLOB_BRACE);
            foreach ($filenames as $filename)
            {
                $tempo=explode('/',$filename);

                echo "<div class=\"col-lg-3 col-md4 col-xs-6 thumb\">";
                echo "<a class=\"thumbnail\" href=\"$softname?photo:$tour:$ordre:::$tempo[4]:$clients_id::::$argconcours\">";
                echo "<p align=\"center\">$tempo[3]/$tempo[4]</p>";
                echo "<img class=\"img-responsive\" src=\"$filename\" alt=\"$filename\">";
                echo "</a>";
                echo "</div>";
            }

Он отображает фотографии 0008.jpg, 0018.jpg 0028.jpg... 0080.jpg 0009.jpg, 0019.jpg... 0089.jpg, 0011.jpg, 0012.jpg, 0013.jpg, 0014.jpg, 0015.jpg,

Похоже, он отображает все фотографии, где он находит номер 8 или 9, затем делает 11,12,13,14,15. Я не вижу, что я делаю неправильно, потому что он отображается только с 0007 до 0015.
Пример фотографии: W32_0008.JPG

  • 0
    Взгляните на то, что вы получаете с помощью «range», это вывод: / * {7,8,9,10,11,12,13} * ... у вас другой подход к проблеме.
Теги:

3 ответа

2
Лучший ответ

Вы должны добавить "конец" в свое выражение, чтобы вы могли реализовать функцию "range": (например, только при поиске.jpg)

glob("$dirname/*0{" . implode(",", range($start, $end)) . "}.jpg", GLOB_BRACE);

это будет только поиск файлов, когда в диапазоне есть ноль в начале!

  • 0
    Протестировано, возвращается только 0015.JPG, и если я заменю запятую рядом с имплозой внутри двойных кавычек на две точки, как предложено Марком Бейкером, то ничего не отобразится.
  • 0
    Сделал правку, в ней была опечатка. Разместите .jpg вне браслетов, это работает на моей машине.
Показать ещё 5 комментариев
5

Числовые значения, начинающиеся с 0 как 0007 и 0015, рассматриваются как восьмеричные числа.

0007 (восьмеричный 7) будет равен десятичному значению 7

но 0015 (восьмеричный 15) будет равен десятичному значению 13

Я бы предположил, что ваша проблема не будет проблемой, если вы определите их как строковые значения:

$start = '0007';
$end = '0015';

РЕДАКТИРОВАТЬ

Я также подозреваю, что вы должны использовать оператор диапазона .. в своем выражении glob, а не в запятую список чисел (предполагая, что PHP glob wrapper поддерживает все функции glob)

glob("$dirname/*{" . $start . '..' . $end . "}.jpg", GLOB_BRACE);
  • 0
    О, восьмеричные ценности, хорошо знать это. Я положил $ start и $ end в строку, как вы показываете, но результат тот же. Я тоже тестировал с двойной кавычкой, но без изменений, к сожалению.
  • 0
    Я проверил свой первый шарик с ... вместо запятой, а потом с твоей, обе фотографии не возвращаются. Может ли это быть функция не поддерживается? Ваш шар с одной запятой возвращает только 0007.jpg и 0015.jpg
Показать ещё 3 комментария
0

У меня была идея PHP-кода, и, похоже, она решила мою проблему. Я думаю, это может быть грязный код. Я открыт для совета или лучшего способа сделать это.

while ($start <= $end) {
            $start = sprintf('%04d', $start);
            $end = sprintf('%04d', $end);

            $filenames = glob("$dirname/*" . $start . ".JPG", GLOB_NOSORT);
            foreach ($filenames as $filename)
            {
                $tempo=explode('/',$filename);

                echo "<div class=\"col-lg-3 col-md4 col-xs-6 thumb\">";
                echo "<a class=\"thumbnail\" href=\"$softname?photo:$tour:$ordre:::$tempo[4]:$clients_id::::$argconcours\">";
                echo "<p align=\"center\">$tempo[3]/$tempo[4]</p>";
                echo "<img class=\"img-responsive\" src=\"$filename\" alt=\"$filename\">";
                echo "</a>";
                echo "</div>";
            }
            $start++;   
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню