Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Sortowanie
Forum PHP.pl > Forum > Przedszkole
yaotzin
  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. ?>
.radex
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
JaRoPHP
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. ?>
yaotzin
  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
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.