2015-11-10 2 views
1

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

Мой текущий код 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.
Exemple названия фото: W32_0008.JPG

+0

Посмотрите, что вы получаете с «диапазоном», это результат:/* {7,8,9,10,11,12,13} * ... вы используете другой подход к проблема. – Paladin

ответ

2

вы должны добавить «конец» к вашему выражению, так что вы можете реализовать «диапазон» особенность: (пример с только ищущим .jpg)

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

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

+0

Протестировано, он возвращает всего 0015.JPG, и если я заменил запятую рядом с развязкой внутри двойных кавычек двумя точками, предложенными Марком Бейкером, это ничего не отображает. – BackTrack57

+0

Сделано редактирование, было опечатка в нем. Поместите .jpg за пределы брака, это работает на моей машине. – Paladin

+0

Теперь я тестировал его с вашим редактированием, и он отображает много фотографий 0007.JPG, 0017.JPG, 0027.JPG ... – BackTrack57

5

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

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

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

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

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

EDIT

Я также подозреваю, что вы должны использовать оператор в .. диапазона в вашем выражении Glob, а не запятой списка номеров (при условии, Глоба оберткой PHP поддерживает все функции Glob)

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

О, восьмеричные значения, хорошо это знать. Я положил $ start и $ end в строку, как вы показываете, но результат тот же. Я тестировал с двойной цитатой тоже, но никаких изменений печально. – BackTrack57

+0

Я проверил свой первоначальный глобус с помощью .. вместо запятой, то ваш, оба не возвращают никаких фотографий. Может быть, функция не поддерживается? Ваш glob с одной запятой возвращает только 0007.jpg и 0015.jpg – BackTrack57

+0

У моего glob нет запятой (',') у него две точки ('..'), которая является оператором диапазона __glob__ –

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++; 
     } 
Смежные вопросы