Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Sortowanie tablicy, w której za indeks, robi data.
krzywy36
post 12.03.2011, 10:58:42
Post #1





Grupa: Zarejestrowani
Postów: 370
Pomógł: 43
Dołączył: 1.12.2007
Skąd: Kędzierzyn Koźle

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


Mam przykładowo taką tablicę:
Kod
Array
(
    [02.2011] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
            [5] => 6
            [6] => 7
            [7] => 8
            [8] => 9
            [9] => 10
        )

    [09.2010] => Array
        (
            [0] => 10
            [1] => 5
            [2] => 6
            [3] => 2
            [4] => 8
            [5] => 9
            [6] => 1
            [7] => 1
            [8] => 1
            [9] => 1
        )

    [03.2011] => Array
        (
            [0] => 6
            [1] => 6
            [2] => 7
            [3] => 8
            [4] => 7
            [5] => 6
            [6] => 6
            [7] => 6
            [8] => 6
            [9] => 6
            [10] => 6
        )

)

jak posortować ją wg. daty malejąco? krsort(), sortuje tylko na podstawie liczby do kropki czyli w powyższym przykładzie zwraca:
Kod
Array
(
    [09.2010] => Array
        (
            [0] => 10
            [1] => 5
            [2] => 6
            [3] => 2
            [4] => 8
            [5] => 9
            [6] => 1
            [7] => 1
            [8] => 1
            [9] => 1
        )

    [03.2011] => Array
        (
            [0] => 6
            [1] => 6
            [2] => 7
            [3] => 8
            [4] => 7
            [5] => 6
            [6] => 6
            [7] => 6
            [8] => 6
            [9] => 6
            [10] => 6
        )

    [02.2011] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
            [5] => 6
            [6] => 7
            [7] => 8
            [8] => 9
            [9] => 10
        )

)

jak zrobić, aby lata też były liczone?

Ten post edytował krzywy36 12.03.2011, 10:59:34


--------------------
pretty as a shit.
Go to the top of the page
+Quote Post
CuteOne
post 12.03.2011, 11:27:10
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


a na czas sortowania nie możesz przestawić daty na YYYY-MM ?

  1.  
  2. foreach($tablica as $k => $v) {
  3.  
  4. $nk = explode('.', $k);
  5. $ntablica[$nk[1].'.'.$nk[0]] = $v;
  6. }
  7.  
  8. // i dopiero to sortować ?


szczerze powiedziawszy nigdy nie sortowałem tablic poza mysql, więc może istnieć jakieś lepsze rozwiązanie


Edit:: do autora- daj za mnie "pomógł" Noidei

Ten post edytował CuteOne 12.03.2011, 11:35:11
Go to the top of the page
+Quote Post
Noidea
post 12.03.2011, 11:32:15
Post #3





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


Żeby zrobić takie niestandardowe sortowanie używa się uksort oraz własnej funkcji porównującej dwa klucze tablicy.

Dodatkowo, żeby tablica była posortowana malejąco trzeba jeszcze odwrócić kolejność (array_reverse)

http://ideone.com/odWzg


--------------------
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: 13.06.2025 - 22:53