Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Sortowanie dwóch tablic wielowymiarowych
pehaperowiec
post
Post #1





Grupa: Zarejestrowani
Postów: 91
Pomógł: 8
Dołączył: 26.09.2011

Ostrzeżenie: (10%)
X----


Mam takie 2 tablice
Kod
Array
(
    [0] => Array
        (
            [id] => 7
            [topic] => sdds9990
            [news_short] => sdfd
            [date] => 2014-01-02 22:36:00
            [show_news] => 1
        )

    [1] => Array
        (
            [id] => 10
            [topic] => as
            [news_short] => asd
            [date] => 2014-01-07 15:26:09
            [show_news] => 0
        )

    [2] => Array
        (
            [id] => 11
            [topic] => aaa
            [news_short] => sd
            [date] => 2014-01-10 11:15:01
            [show_news] => 1
        )

)
Jak je posortować po polu date a następnie połączyć te dwie tabele w 1 by była posortowana względem daty?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
YourFrog
post
Post #2





Grupa: Zarejestrowani
Postów: 124
Pomógł: 22
Dołączył: 10.01.2014

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


http://wklej.to/i9CTx

Części z merge nie rozumiem bo ja tam widzę 1 tabelę z 3 tabelami w środku tongue.gif

Ten post edytował YourFrog 10.01.2014, 14:25:28
Go to the top of the page
+Quote Post
pehaperowiec
post
Post #3





Grupa: Zarejestrowani
Postów: 91
Pomógł: 8
Dołączył: 26.09.2011

Ostrzeżenie: (10%)
X----


Chyba się troszke nie zrozumieniliśmy:D więc jeszcze raz:D dla przykładu, mam 2 tablice
Kod
Array
(
    [0] => Array
        (
            [id] => 7
            [topic] => sdds9990
            [news_short] => sdfd
            [date] => 2014-01-02 22:36:00
            [show_news] => 1
        )

    [1] => Array
        (
            [id] => 10
            [topic] => as
            [news_short] => asd
            [date] => 2014-01-07 15:26:09
            [show_news] => 0
        )

    [2] => Array
        (
            [id] => 11
            [topic] => aaa
            [news_short] => sd
            [date] => 2014-01-10 11:15:01
            [show_news] => 1
        )

)
oraz
Kod
Array
(
    [0] => Array
        (
            [id] => 7
            [topic] => sdds9990
            [news_short] => sdfd
            [date] => 2014-01-05 22:36:00
            [show_news] => 1
        )

    [1] => Array
        (
            [id] => 10
            [topic] => as
            [news_short] => asd
            [date] => 2014-01-11 15:26:09
            [show_news] => 0
        )

    [2] => Array
        (
            [id] => 11
            [topic] => aaa
            [news_short] => sd
            [date] => 2014-01-20 11:15:01
            [show_news] => 1
        )

)
i chciałbym otrzymać:
Kod
Array
(
    [0] => Array
        (
            [id] => 7
            [topic] => sdds9990
            [news_short] => sdfd
            [date] => 2014-01-02 22:36:00
            [show_news] => 1
        )
        
    [1] => Array
        (
            [id] => 7
            [topic] => sdds9990
            [news_short] => sdfd
            [date] => 2014-01-05 22:36:00
            [show_news] => 1
        )

    [2] => Array
        (
            [id] => 10
            [topic] => as
            [news_short] => asd
            [date] => 2014-01-07 15:26:09
            [show_news] => 0
        )
    
    [3] => Array
        (
            [id] => 10
            [topic] => as
            [news_short] => asd
            [date] => 2014-01-11 15:26:09
            [show_news] => 0
        )

    [4] => Array
        (
            [id] => 11
            [topic] => aaa
            [news_short] => sd
            [date] => 2014-01-10 11:15:01
            [show_news] => 1
        )
        
    [5] => Array
        (
            [id] => 11
            [topic] => aaa
            [news_short] => sd
            [date] => 2014-01-20 11:15:01
            [show_news] => 1
        )

)
czyli połączone 2 tablice, która będzie posortowana względem daty wink.gif
Cytat
Części z merge nie rozumiem bo ja tam widzę 1 tabelę z 3 tabelami w środku tongue.gif
Możesz jasniej?biggrin.gif
Go to the top of the page
+Quote Post
YourFrog
post
Post #4





Grupa: Zarejestrowani
Postów: 124
Pomógł: 22
Dołączył: 10.01.2014

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


http://wklej.to/EgiNJ

Mam nadzieję że teraz dobrze zrozumiałem tongue.gif

Chodziło mi oto że w php jest funkcja łącząca dowolną ilość tablic ze sobą nazwya się ona "array_merge" jednak ma jedną wadę / zaletę. Łącząc tablice stara się zachować przypisanie do kluczy co powoduje nadpisywanie się kluczy ze sobą. W przykładzie naskrobałem na szybko metodę robiącą to samo ale nie zachowującą przypisanie do kluczy. Po złączeniu tablic musisz wywołać metodę sortującą w naszym przypadku to funkcja bez nazwy przekazana jako parametr do uasort.


@Edit
http://wklej.to/5dtMf

Możesz jeszcze spróbować takiej funkcji na większe podobieństwo z array_merge jednak wydaje mi się gorsza w użyciu.

Ten post edytował YourFrog 10.01.2014, 15:23:26
Go to the top of the page
+Quote Post
pehaperowiec
post
Post #5





Grupa: Zarejestrowani
Postów: 91
Pomógł: 8
Dołączył: 26.09.2011

Ostrzeżenie: (10%)
X----


a jak tego użyć gdy mam 2 tablice? Bo chciałbym by z dwóch takich co podałem w przykładzie powstała 1 posortowana względem daty. Czy mógłbyś mi pomóc?
Go to the top of the page
+Quote Post
tomxx
post
Post #6





Grupa: Zarejestrowani
Postów: 172
Pomógł: 27
Dołączył: 5.10.2013

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


Do sortowania użyj funkcji uasort.
  1. <?php
  2. function sortowanie($a, $b)
  3. {
  4. if($a["date"] > $b["date"]) return -1;
  5. return 1;
  6. }
  7.  
  8. $tablica[0] = array("id"=>7, "topic"=>sdds9990, "news_short"=>sdfd, "date"=>"2014-01-02 22:36:00", show_news=>1);
  9. /* ... itd. ... */
  10.  
  11. uasort($tablica, "sortowanie");
  12. ?>
Go to the top of the page
+Quote Post
pehaperowiec
post
Post #7





Grupa: Zarejestrowani
Postów: 91
Pomógł: 8
Dołączył: 26.09.2011

Ostrzeżenie: (10%)
X----


Nie rozumiem... mógłbyś mi rozwinąc jak moge połaczyc te 2 tablice w 1 i posortowąć po dacie?
Go to the top of the page
+Quote Post
tomxx
post
Post #8





Grupa: Zarejestrowani
Postów: 172
Pomógł: 27
Dołączył: 5.10.2013

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


  1. <?php
  2. #Dwie tablice, które chcesz połączyć w jedną
  3. $tablica1 = array(
  4. array("id"=>7, "topic"=>sdds9990, "news_short"=>sdfd, "date"=>"2014-01-02 22:36:00", show_news=>1),
  5. /* ... */
  6. )
  7.  
  8. $tablica2 = array(
  9. array("id"=7, /* ... */),
  10. /* ... */
  11. )
  12.  
  13. #Pętla łącząca tablice (zmienna $tablica to będzie połączona tablica)
  14. for($i = 0; $i < count($tablica1); $i++) {
  15. $tablica[] = $tablica1[$i];
  16. $tablica[] = $tablica2[$i];
  17. }
  18.  
  19. #Funkcja sortująca tablicę wg daty
  20. function sortowanie($a, $b)
  21. {
  22. if($a["date"] > $b["date"]) return -1;
  23. return 1;
  24. }
  25.  
  26. #Teraz sortowanie tablicy:
  27. uasort($tablica, "sortowanie");
  28. ?>
Oczywiście jeśli masz PHP 5 >= 5.4, to możesz używać [ ... ] dla tablic.
Go to the top of the page
+Quote Post
pehaperowiec
post
Post #9





Grupa: Zarejestrowani
Postów: 91
Pomógł: 8
Dołączył: 26.09.2011

Ostrzeżenie: (10%)
X----


No zgadza się, dostaje taki wynik:
Kod
Array
(
    [1] => Array
        (
            [id] => 4
            [gallery_name] => asd
            [date] => 2014-01-11 06:40:29
            [show_gallery] => 1
            [img_main] => b_adv.png
        )

    [6] => Array
        (
            [id] => 12
            [topic] => 1
            [news_short] => aa
            [date] => 2014-01-11 06:38:51
            [show_news] => 1
        )

    [3] => Array
        (
            [id] => 3
            [gallery_name] => 2
            [date] => 2014-01-10 14:48:41
            [show_gallery] => 1
            [img_main] => img.png
        )

    [5] => Array
        (
            [id] => 2
            [gallery_name] => 1
            [date] => 2014-01-10 14:35:50
            [show_gallery] => 1
            [img_main] => b_logo.png
        )

    [4] => Array
        (
            [id] => 11
            [topic] => aaa
            [news_short] => sd
            [date] => 2014-01-10 11:15:01
            [show_news] => 1
        )

    [2] => Array
        (
            [id] => 10
            [topic] => as
            [news_short] => asd
            [date] => 2014-01-07 15:26:09
            [show_news] => 0
        )

    [0] => Array
        (
            [id] => 7
            [topic] => sdds9990
            [news_short] => sdfd
            [date] => 2014-01-02 22:36:00
            [show_news] => 1
        )

)
Tylko jak teraz powyciągać dane w takiej kolejności:D indeksy nei są po kolei:D
Go to the top of the page
+Quote Post
tomxx
post
Post #10





Grupa: Zarejestrowani
Postów: 172
Pomógł: 27
Dołączył: 5.10.2013

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


Indeksy nie są po kolei, ponieważ tablica jest posortowana wg daty (tak, jak wcześniej chciałeś).
Rozumiem jednak, że chcesz najpierw posortować obie tablice osobno, a potem połączyć.
W takim wypadku:
  1. <?php
  2. #Dwie tablice, które chcesz połączyć w jedną
  3. $tablica1 = array(
  4. array("id"=>7, "topic"=>sdds9990, "news_short"=>sdfd, "date"=>"2014-01-02 22:36:00", show_news=>1),
  5. /* ... */
  6. )
  7.  
  8. $tablica2 = array(
  9. array("id"=7, /* ... */),
  10. /* ... */
  11. )
  12. #Funkcja sortująca tablicę wg daty
  13. function sortowanie($a, $b)
  14. {
  15. if($a["date"] > $b["date"]) return -1;
  16. return 1;
  17. }
  18.  
  19. #Teraz sortowanie tablic:
  20. uasort($tablica1, "sortowanie");
  21. uasort($tablica2, "sortowanie");
  22.  
  23. #Pętla łącząca tablice (zmienna $tablica to będzie połączona tablica)
  24. for($i = 0; $i < count($tablica1); $i++) {
  25. $tablica[] = $tablica1[$i];
  26. $tablica[] = $tablica2[$i];
  27. }
  28.  
  29. ?>
Po prostu zamieniasz funkcje sortujące wstawiasz bezpośrednio po utworzeniu obu tablic.

Ten post edytował tomxx 11.01.2014, 12:21:19
Go to the top of the page
+Quote Post
IceManSpy
post
Post #11





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


To Ci "zresetuje" indeksy tablicy:
http://php.net/manual/en/function.array-values.php


--------------------
Go to the top of the page
+Quote Post
tomxx
post
Post #12





Grupa: Zarejestrowani
Postów: 172
Pomógł: 27
Dołączył: 5.10.2013

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


uasort
uasort zachowuje skojarzenia kluczy
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: 19.08.2025 - 20:33