Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Sortowanie
yaotzin
post
Post #1





Grupa: Zarejestrowani
Postów: 157
Pomógł: 0
Dołączył: 12.02.2007
Skąd: Zielona Góra

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


  1. <?php
  2. // funkcja sortująca
  3. function cmp ($a, $b) {
  4. $datea = explode('-', $a['dataWyst'][0]);
  5. $dateb = explode('-', $b['dataWyst'][0]);
  6.  
  7. $date1 = mktime(0, 0, 0, $datea[2], $datea[1], $datea[0]);  
  8. $date2 = mktime(10, 12, 0, $dateb[2], $dateb[1], $dateb[0]);
  9.  
  10. if (date("d-m-Y", $date1) == date("d-m-Y", $date2)){
  11. return 0;
  12. }
  13. if (date("d-m-Y", $date1) < date("d-m-Y", $date2)){
  14. return -1;
  15. }
  16. if (date("d-m-Y", $date1) > date("d-m-Y", $date2)){
  17. return 1;
  18. }
  19. }
  20. ?>


Witam! Mam problem z sortowaniem wg daty danych. Wykrozystuję do srotwania tablicy wielowymiarowej funkcję uasort. Niestety prawdopodobnie pomieszałem jakieś warunki w momencie porównywania dat w funkcji cmp. I sortowanie odbywa się poprawnie tylko wg. dnia a wg innych danych jak rok miesiąć niestety nie. Wie ktoś może jak to naprawić questionmark.gif w Powyższej funkcji $b['dataWyst'][0] posiada datę w zapisie RRRR-DD-MM zostaje ona rozbita i przekształcona funkcją mktime na datę (czy jak to tam nazwać). następnie w kolejnych liniach jest ona porówynwana i zwracane są odpowiednie warunki, i tu sądzę że jest główny problem. Czy jest ktoś w stanie mi pomóc questionmark.gif

  1. <?php
  2. @uasort($tab['tabela'][0]['tab1'], "cmp");//posortowanie wg reguły zawartej w funkcji cmp patrz wyżej
  3. ?>


--------------------
------
Per Aspera Ad Astra
Go to the top of the page
+Quote Post
.radex
post
Post #2





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Masz problem z datami? Bo nie do końca zrozumiałem. Jeśli tak to:

początkowo: RRRR-MM-DD
później: DD-MM-RRRR

:
  1. <?
  2. $input = "2005-03-14";
  3. $make = explode("-" ,$input);
  4. $make = $make[0] . '-' . $make[1] .'-' . $make[2];
  5. $output = $make;
  6. ?>


Jeśli nie, to nie wiem

Aha, już to masz tongue.gif Sorka. To nie wiem

Ten post edytował radex_p 15.04.2007, 07:59:57


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #3





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

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


Niestety na razie nie mam możliwości sprawdzenia kodu, ale proponuję troszkę inne rozwiązanie. Otóz po rozbiciu daty na rok, miesiąc i dzień porównywać odpowiednie składniki, a nie korzystać już z funkcji mktime. Schematycznie:
  1. <?php
  2. (rok 1 < rok2) ? return -: return 1;
  3. (msc1 < msc2) ? return -: return 1;
  4. (dn1 < dn2) ? return -: return 1;
  5. return 0;
  6. ?>


--------------------
Kto pyta, nie błądzi...
Kto zbłądził, ten pyta...
Go to the top of the page
+Quote Post
yaotzin
post
Post #4





Grupa: Zarejestrowani
Postów: 157
Pomógł: 0
Dołączył: 12.02.2007
Skąd: Zielona Góra

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


  1. <?php
  2. (rok 1 < rok2) ? return -: return 1;(msc1 < msc2) ? return -: return 1;(dn1 < dn2) ? return -: return 1;return 0;
  3. ?>



Lekka korekta:

  1. <?php
  2. return (rok 1 < rok2) ? -: 1;
  3. return (msc1 < msc2) ? -: 1;
  4. return (dn1 < dn2) ? -: 1;
  5.  
  6. return 0;
  7. ?>


No i wcześniej trzeba sprawdzić czy nie jest równe.


Dzieki za pomoc. POZDRO


--------------------
------
Per Aspera Ad Astra
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 Aktualny czas: 22.08.2025 - 05:26