Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Sortowanie tablicy
botnaizi
post 4.07.2012, 13:57:05
Post #1





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 8.12.2009

Ostrzeżenie: (0%)
-----


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?

Ten post edytował botnaizi 4.07.2012, 13:58:47
Go to the top of the page
+Quote Post
Tajgeer
post 4.07.2012, 13:59:32
Post #2





Grupa: Zarejestrowani
Postów: 290
Pomógł: 48
Dołączył: 11.05.2008
Skąd: Kielce

Ostrzeżenie: (0%)
-----


W jaki sposób wrzucasz do tablicy? Pokaż to, co masz do tej pory.
Go to the top of the page
+Quote Post
botnaizi
post 4.07.2012, 15:38:56
Post #3





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 8.12.2009

Ostrzeżenie: (0%)
-----


  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];


Ten post edytował botnaizi 4.07.2012, 15:39:19
Go to the top of the page
+Quote Post
gr56
post 4.07.2012, 15:52:59
Post #4





Grupa: Zarejestrowani
Postów: 77
Pomógł: 15
Dołączył: 19.11.2011

Ostrzeżenie: (0%)
-----


Możesz przekonwertować date do formatu unixowego za pomocą funkcji strftime a potem użyć funkcji sort
Go to the top of the page
+Quote Post
peter13135
post 4.07.2012, 15:55:13
Post #5





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


skorzystaj z u_sort.

dodatkowo przyda Ci się strtotime (żeby mieć znacznik uniksowy - integery można porównywać) albo obiekt DateTime i jego metody.


--------------------
:)
Go to the top of the page
+Quote Post
botnaizi
post 4.07.2012, 16:44:10
Post #6





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 8.12.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował botnaizi 4.07.2012, 16:49:24
Go to the top of the page
+Quote Post
peter13135
post 4.07.2012, 16:49:41
Post #7





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


użyj u_sort tak jak pisałem w poprzednim poście, to nie będziesz musiał "odkręcać"


--------------------
:)
Go to the top of the page
+Quote Post
botnaizi
post 4.07.2012, 22:32:01
Post #8





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 8.12.2009

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował botnaizi 4.07.2012, 23:27:25
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 21:45