Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sortowanie w petli
Forum PHP.pl > Forum > Przedszkole
todziu
Witam - pobrałem sobie z dobrodziejstw internetu skrypt Galeria Zdjęć :
https://www.aurainweb.pl/2019/10/jak-automa...a-w-php-jquery/

mam problem przy wyświetlaniu zdjęć w pętli foreach, obecnie zdjęcia wyświetlane są losowo, a chciałbym chronologicznie.
Zdjęcia w katalogu ./images mam ponumerowane 1.jpg, 2.jpg itd

kod PHP:
  1.  
  2. <?php
  3.  
  4. $dirname = "images/";
  5.  
  6. $images = glob("$dirname*.{png,jpeg,jpg,JPG,gif}", GLOB_BRACE);
  7.  
  8.  
  9. foreach($images as $image) {
  10. ?>
  11.  
  12. <a class="example-image-link gallery-item" href="<?php echo $image; ?>" data-lightbox="example-set" data-title="">
  13. <img class="example-image img-responsive" src="<?php echo $image; ?>" />
  14. </a>
  15. <?php
  16. }


pomożecie ?
dublinka
  1. <?php
  2.  
  3. $ca = dir('images');
  4. $tab = array();
  5.  
  6. while((false!==($pl=$ca->read())))
  7. {
  8. if($pl!="."&&$pl!="..")
  9. {
  10. if(substr($pl,-strlen('.jpg'))=='.jpg')
  11. {
  12. $tab[] = $pl;
  13.  
  14. };
  15. };
  16. };
  17.  
  18. sort($tab);
  19.  
  20. foreach($tab as $img)
  21. {
  22. print $img;
  23. }
  24.  
  25. ?>
LowiczakPL
glob zwraca Ci nazwy plików posortowane alfabetycznie, ale masz je pogrupowane według rozszerzenia

aby to zmienić dodaj asort przed foreach

  1. asort($images);
  2.  
  3. foreach($images as $image) {
dublinka
Zapomnialem dodac filtrów smile.gif

  1. <?php
  2.  
  3. $ca = dir('images');
  4. $tab = array();
  5. $type = array('gif', 'png', 'jpg', 'jpeg');
  6. while((false!==($pl=$ca->read())))
  7. {
  8. if($pl!="."&&$pl!="..")
  9. {
  10.  
  11. $tab[] = $pl;
  12.  
  13.  
  14. };
  15. };
  16.  
  17. sort($tab);
  18.  
  19. foreach($tab as $img)
  20. {
  21.  
  22. $name = explode('.', $img);
  23. if(in_array($name[1], $type))
  24. {
  25. print $img;
  26. }
  27.  
  28. }
  29.  
  30. ?>
LowiczakPL
W jakim celu tak kombinować do bazowego kodu tylko 1 funkcja asort i to wszystko

1. pobrać pliki
2. posortować
3. wyświetlić

  1. <?php
  2. $images = glob("images/*.{png,jpeg,jpg,JPG,gif}", GLOB_BRACE);
  3. asort($images);
  4.  
  5. foreach ($images as $image) {
  6. echo '<a class="example-image-link gallery-item" href="' . $image . '" data-lightbox="example-set" data-title="">;
  7. echo '<img class="example-image img-responsive" src="' . $image . '" /></a>';
  8. }
todziu
niestety nie działa sortowanie, zdjęcia wyświetlane są w 3 kolumnach ale dalej nie są sortowane chronologicznie sad.gif
trueblue
Spróbuj użyć https://www.php.net/manual/en/function.natsort.php
LowiczakPL
nie dopatrzyłem się dałem alfabetyczne sortowanie a Ty chiałes chronologiczne, więc zamiast asort daj

  1. usort($images, function($a, $b) {return filemtime($b) - filemtime($a);});


a będzie sortowało według daty

Co nie oznacza to że pliki o identycznej dacie i czasie nie będą losowe
dublinka
Cytat(todziu @ 8.03.2021, 10:01:39 ) *
niestety nie działa sortowanie, zdjęcia wyświetlane są w 3 kolumnach ale dalej nie są sortowane chronologicznie sad.gif

Tu masz

https://www.w3schools.com/php/php_arrays_sort.asp
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.