Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Sortowanie tablicy
Forum PHP.pl > Forum > Przedszkole
botnaizi
Witajcie,

Mam problem muszę posortować pliki które mają nazwę dd-mm-RRRR-HH-MM.png, pliki zczytuję z folderu ale właściwie nie wiem co dalej z nimi zrobić, żeby je posortować. Tworzone są dokładnie co minutę, możnaby chyba je posortować po dacie utworzenia, ale nie mam pojęcia jak się za to zabrać. Wrzucam je w tablicę, ale właściwie nie wiem co z tym dalej zrobić.
Macie może jakieś pomysły?
Tajgeer
W jaki sposób wrzucasz do tablicy? Pokaż to, co masz do tej pory.
botnaizi
  1. $folder = "var";
  2. $open = opendir($folder);
  3. $i=0;
  4. while ($files = readdir($open)) {
  5. $filename = $files;
  6. if ($filename == "."){
  7. print "\n";
  8. }
  9. elseif ($filename == ".."){
  10. print "\n";
  11. }
  12. else {
  13. $tab[$i] = $filename;
  14. //print '<a href='.$folder.'/'.$filename.' class="thumb_link"><span class="selected"></span><img src='.$folder.'/'.$filename.' /></a><br />';
  15. $i++;
  16. }
  17. }
  18. //print $tab[1];
gr56
Możesz przekonwertować date do formatu unixowego za pomocą funkcji strftime a potem użyć funkcji sort
peter13135
skorzystaj z u_sort.

dodatkowo przyda Ci się strtotime (żeby mieć znacznik uniksowy - integery można porównywać) albo obiekt DateTime i jego metody.
botnaizi
Ok, mam teraz coś takiego:
  1. <?php
  2.  
  3. $folder = "var";
  4. $open = opendir($folder);
  5. $i=0;
  6. while ($files = readdir($open)) {
  7. $filename = $files;
  8. if ($filename == "."){ //to zapobiegnie wyświetleniu pliku, którego w rzeczywistości niema (błąd występujący przy funkcji readdir)
  9. print "\n";
  10. }
  11. elseif ($filename == ".."){ //tak jak wyzej
  12. print "\n";
  13. }
  14. else {
  15. //$tab[$i] = $filename;
  16. //print '<a href=""><img id="slide-img-'.$i.'" src="'.$folder.'/'.$filename.'" class="slide" alt=""/></a><br />'; //wyswietlamy nasze pliki
  17. $timestamp = strtotime($filename);
  18. $i++;
  19. $tab[$i] = $timestamp;
  20.  
  21. }
  22. }
  23. //print $tab[1];
  24. sort($tab);
  25. for($i=0; $i<=count($tab); $i++){
  26. print $tab[$i]."<br>";
  27. }
  28.  
  29. ?>

Tylko jak to odkręcić w drugą stronę teraz? Bo każdy taki "1341420060" ma być linkiem do odpowiedniego screena. A do tego, czy poprawnie mi zrobiło, że jest każde z +60 na końcu, czy w ogóle źle tej funkcji użyłem? smile.gif

Zawsze, żeby było łatwiej mogę na pliku zmienić, tylko nie bardzo ogarniam basha. Najłatiej by chyba było zczytać ile jest plików i dać mu nazwę i+1 ale nie bardzo to ogarniam.
peter13135
użyj u_sort tak jak pisałem w poprzednim poście, to nie będziesz musiał "odkręcać"
botnaizi
Kombinuję i kombinuję ale nie wiem jak do tego dojść. Tablica od razu ma wrzucone przeformatowane wartości więc musiałbym użyć pewnie jakiegoś => czy coś, o czym nie mam bladego pojęcia smile.gif

Dorzuciłem taki kod
  1. function cmp($a, $b)
  2. {
  3. if ($a == $b) {
  4. return 0;
  5. }
  6. return ($a < $b) ? -1 : 1;
  7. }
  8.  
  9. $a = $tab;
  10. $i = 0;
  11.  
  12. usort($a, "cmp");
  13.  
  14. foreach ($a as $key => $value) {
  15. echo "$a[$i]: $value<br />";
  16. $i++;


Ale właściwie nic nie wnosi bo niby posortuje, ale nie ma jak przypisać do niego tej daty.

@EDIT: No wystarczyło troszkę głowa ruszyć i wyszło. Może komuś się przyda:
  1. <?php
  2. $folder = "var";
  3. $open = opendir($folder);
  4. $i=0;
  5. while ($files = readdir($open)) {
  6. $filename = $files;
  7. if ($filename == "." or $filename == ".."){
  8. print "\n";
  9. }
  10. else {
  11. $tab[$i] = $filename;
  12. $i++;
  13.  
  14. }
  15. }
  16. function cmp($tab, $b)
  17. {
  18. if ($tab == $b) {
  19. return 0;
  20. }
  21. return ($tab > $b) ? -1 : 1;
  22. }
  23.  
  24. $i = 0;
  25.  
  26. usort($tab, "cmp");
  27.  
  28. foreach ($tab as $key) {
  29.  
  30. echo "<a href='$folder/$tab[$i]'>$tab[$i]</a><br />";
  31. $i++;
  32. }
  33. ?>
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.