Mam pewien, na pozór mały problem. Otórz rzecz dotyczy sortowania. Chodzi o to aby wyświetlać pliki (graficzne) w kolejności od najstarszego do najmłodszego. Pliki te są uploadowane przez kamery IP. Chciałbym mieć możliwość wyświetlania zdjęć z zadanego przedziału czasowego w w/w kolejności.
bez tworzenia sortowania program zwraca pliki w następującej kolejności:
CODE
motion-2007-09-11-11-40-08.jpg
motion-2007-09-11-11-42-18.jpg
motion-2007-09-06-18-03-06.jpg
motion-2007-09-08-10-09-13.jpg
motion-2007-09-08-10-13-44.jpg
motion-2007-09-08-10-19-02.jpg
motion-2007-09-08-10-23-59.jpg
motion-2007-09-08-10-28-25.jpg
motion-2007-09-08-10-34-03.jpg
motion-2007-09-08-10-41-05.jpg
motion-2007-09-08-10-46-10.jpg
motion-2007-09-08-10-51-27.jpg
motion-2007-09-08-10-56-24.jpg
motion-2007-09-08-11-00-57.jpg
motion-2007-09-08-11-05-36.jpg
motion-2007-09-08-11-10-04.jpg
motion-2007-09-08-11-14-41.jpg
motion-2007-09-08-11-19-10.jpg
motion-2007-09-08-11-24-38.jpg
motion-2007-09-08-11-29-11.jpg
motion-2007-09-08-11-33-39.jpg
motion-2007-09-08-11-38-36.jpg
motion-2007-09-08-11-43-35.jpg
motion-2007-09-08-11-48-45.jpg
motion-2007-09-08-11-53-55.jpg
motion-2007-09-08-11-58-49.jpg
motion-2007-09-08-12-03-52.jpg
motion-2007-09-08-12-09-59.jpg
motion-2007-09-06-09-08-22.jpg
motion-2007-09-06-15-29-47.jpg
motion-2007-09-06-21-57-47.jpg
motion-2007-09-06-22-31-11.jpg
motion-2007-09-06-22-38-34.jpg
motion-2007-09-06-22-46-43.jpg
motion-2007-09-06-23-30-33.jpg
motion-2007-09-06-23-39-28.jpg
motion-2007-09-06-23-48-39.jpg
motion-2007-09-07-00-01-08.jpg
motion-2007-09-07-00-10-03.jpg
motion-2007-09-06-08-54-05.jpg
motion-2007-09-06-23-10-56.jpg
motion-2007-09-06-23-23-10.jpg
motion-2007-09-06-23-34-37.jpg
motion-2007-09-06-23-42-25.jpg
motion-2007-09-06-23-52-58.jpg
motion-2007-09-07-00-03-49.jpg
motion-2007-09-07-00-14-08.jpg
motion-2007-09-05-22-51-52.jpg
motion-2007-09-05-23-57-07.jpg
motion-2007-09-06-00-01-12.jpg
motion-2007-09-06-00-05-16.jpg
motion-2007-09-06-00-09-06.jpg
motion-2007-09-06-00-12-25.jpg
motion-2007-09-06-00-16-29.jpg
motion-2007-09-06-00-20-19.jpg
...
...
...
(skopiowałem tylko część ze względu na oszczędność miejsca na serwerze

Po zastosowaniu funkcji natsort() pliki wyswietlają sie mniej wiecej w takiej kolejności:
CODE
motion-2007-09-11-11-40-08.jpg
motion-2007-09-11-11-42-18.jpg
motion-2007-09-06-18-03-06.jpg
motion-2007-09-08-10-09-13.jpg
motion-2007-09-08-10-13-44.jpg
motion-2007-09-08-11-24-38.jpg
motion-2007-09-08-11-29-11.jpg
motion-2007-09-08-11-33-39.jpg
motion-2007-09-08-11-38-36.jpg
motion-2007-09-08-11-43-35.jpg
motion-2007-09-08-11-48-45.jpg
motion-2007-09-08-11-53-55.jpg
motion-2007-09-08-11-58-49.jpg
motion-2007-09-08-12-03-52.jpg
motion-2007-09-08-12-09-59.jpg
motion-2007-09-06-09-08-22.jpg
motion-2007-09-06-15-29-47.jpg
motion-2007-09-06-21-57-47.jpg
motion-2007-09-06-23-30-33.jpg
motion-2007-09-06-23-39-28.jpg
motion-2007-09-06-23-48-39.jpg
motion-2007-09-07-00-01-08.jpg
motion-2007-09-07-00-10-03.jpg
motion-2007-09-06-08-54-05.jpg
motion-2007-09-06-23-10-56.jpg
motion-2007-09-06-23-23-10.jpg
motion-2007-09-06-23-34-37.jpg
motion-2007-09-06-23-42-25.jpg
motion-2007-09-06-23-52-58.jpg
motion-2007-09-07-00-03-49.jpg
motion-2007-09-07-00-14-08.jpg
motion-2007-09-05-22-51-52.jpg
motion-2007-09-05-22-55-42.jpg
motion-2007-09-05-22-59-47.jpg
motion-2007-09-05-23-34-27.jpg
motion-2007-09-05-23-38-31.jpg
motion-2007-09-05-23-41-50.jpg
motion-2007-09-05-23-45-54.jpg
motion-2007-09-05-23-49-44.jpg
motion-2007-09-05-23-53-49.jpg
motion-2007-09-05-23-57-07.jpg
motion-2007-09-06-00-01-12.jpg
Nie wiem gdzie tu logika - natsort() to chyba sortowanie naturalne, nie rozumiem dlaczego pliki są posortowane w takiej kolejności.
Nie poddałem się od razu i napisałem sam funkcję która posortuje pliki według daty ostatniej modyfikacji:
<?php $sortuj = 1; while ( $soruj == 1) { $sortuj = 0; $i = 1; { if ( $por_1 < $por_2) { $por_1 = $por_2; $i++; } else { $temp = $tablica_plikow[$i]; $j = $i; $tablica_plikow[$i] = $tablica_plikow[$j--]; $j = $i; $tablica_plikow[$j--] = $temp; $i++; $sortuj = 1; } } } ?>
po zastosowaniu takiego sortowania kolejność wyświetlania plików jest identyczna jak w przypadku zastosowania sortowania natsort().
Pomyślałem żeby spróbować wykorzystać nazwę pliku (czyli np. motion-2007-09-08-10-09-13.jpg - bo takie nazwy zostają im nadawane przez kamery) i na podstawie daty w nich zawartej sortować te pliki.
Stworzyłem skrypt który czyta najpierw rok z dwóch pierwszych plików, porównuje je - jeśli I jest starszy to przechodzi dalej; - jeśli II jest starszy to zamienia je i przechodzi dalej; - jeśli są równe to czyta miesiąc i robi dokładnie to samo co w przypadku roku... potem dzien, godzina, minuta i sekunda.
<?php $wskaznik = 1; while ($wskaznik == 1) { $wskaznik = 0; //wskaźnik // "0" $x = $tablica_plikow[0]; //pobiera nazwe I el. $l = 1; //wart pocz. { $y = $tablica_plikow[$l]; //pobiera nazwe II el. if ($xi < $yi) // "1.1" { $xi = $yi; $l++; } else { if ($xi != $yi) // "1.2" { $temp = $y; $tablica_plikow[$l] = $x; $tablica_plikow[$l-1] = $temp; $l++; $wskaznik = 1; } else { if ($xi < $yi) // "2.1" { $xi = $yi; $l++; } else { if ($xi != $yi) // "2.2" { $temp = $y; $tablica_plikow[$l] = $x; $tablica_plikow[$l-1] = $temp; $l++; $wskaznik = 1; } else { if ($xi < $yi) // "3.1" { $xi = $yi; $l++; } else { if ($xi != $yi) // "3.2" { $temp = $y; $tablica_plikow[$l] = $x; $tablica_plikow[$l-1] = $temp; $l++; $wskaznik = 1; } else { if ($xi < $yi) // "4.1" { $xi = $yi; $l++; } else { if ( $xi != $yi) // "4.2" { $temp = $y; $tablica_plikow[$l] = $x; $tablica_plikow[$l-1] = $temp; $l++; $wskaznik = 1; } else { if ($xi < $yi) // "5.1" { $xi = $yi; $l++; } else { if ($xi != $yi) // "5.2" { $temp = $y; $tablica_plikow[$l] = $x; $tablica_plikow[$l-1] = $temp; $l++; $wskaznik = 1; } else { if ($xi < $yi) { $xi = $yi; $l++; } else { $temp = $y; $tablica_plikow[$l] = $x; $tablica_plikow[$l-1] = $temp; $l++; $wskaznik = 1; } } } } } } } } } } } } } ?>
No i tu pojawił się problem... program sie zapętla.... możliwe że dzieje sie tak ze względu na dużą ilość plików (ok. 500) - petla jest wykonywana tak długo aż wszystkie pliki nie będą poukładane w odpowiedniej kolejności - przynajmniej takie były założenia.
Podsumowując chciałbym prosić o pomoc. Nie wiem czy mam kombinować dalej z tym ostatnim pomyslem czy jest jakiś inny, być może łatwiejszy sposób, żeby posortować to jak należy.
Za wszelką pomoc, jakieś wskazówki z góry dziekuje
Pozdrawiam
Tomek Kierat