Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]sortowanie tablicy
wpaski
post 8.02.2022, 14:12:17
Post #1





Grupa: Zarejestrowani
Postów: 206
Pomógł: 6
Dołączył: 25.12.2011

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


hej kombinowałem z funkcją usort, ale nie umiem znaleźć przykładu z tym co ja mam, może ktoś pomoże?
jest
  1. $zm = [
  2. 6000 => [
  3. 0 => [
  4. 'wskaznik' => 100
  5. ],
  6. 1 => [
  7. 'wskaznik' => 100
  8. ]
  9. ],
  10. 8000 => [
  11. 0 => [
  12. 'wskaznik' => 50
  13. ],
  14. 1 => [
  15. 'wskaznik' => 50
  16. ]
  17. ],
  18. 4000 => [
  19. 0 => [
  20. 'wskaznik' => 200
  21. ],
  22. 1 => [
  23. 'wskaznik' => 200
  24. ]
  25. ],
  26. ];

chcę
Kod
Array
(
    [8000] => Array
        (
            [0] => Array
                (
                    [wskaznik] => 50
                )

            [1] => Array
                (
                    [wskaznik] => 50
                )
        ),
    [6000] => Array
        (
            [0] => Array
                (
                    [wskaznik] => 100
                )

            [1] => Array
                (
                    [wskaznik] => 100
                )
        ),
    [4000] => Array
        (
            [0] => Array
                (
                    [wskaznik] => 200
                )

            [1] => Array
                (
                    [wskaznik] => 200
                )
        )
)


czyli sortowanie wg tej wartości wskaznik rosnąco, wskaznik w kazdej tablicy jest taki sam

Ten post edytował wpaski 8.02.2022, 14:15:17
Go to the top of the page
+Quote Post
Salvation
post 8.02.2022, 14:29:56
Post #2





Grupa: Zarejestrowani
Postów: 403
Pomógł: 72
Dołączył: 15.07.2014

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


https://www.php.net/manual/en/function.krsort.php

Demo: https://3v4l.org/V15IV
Go to the top of the page
+Quote Post
wpaski
post 8.02.2022, 14:39:38
Post #3





Grupa: Zarejestrowani
Postów: 206
Pomógł: 6
Dołączył: 25.12.2011

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


tam mogą też być inne klucze, a ma sortować wg wskaznik, zapomniałem o tym wspomnieć sorki, więc to rozwiązanie odpada
Go to the top of the page
+Quote Post
nospor
post 8.02.2022, 14:52:18
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Po pierwsze nie usort lecz uksort skoro chcesz zachowac klucze.
A po drugie pokaz co splodziles do tej pory


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wpaski
post 8.02.2022, 15:11:45
Post #5





Grupa: Zarejestrowani
Postów: 206
Pomógł: 6
Dołączył: 25.12.2011

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


tak próbowałem ale to nie działa
  1. foreach ($zm as $key => $subarray) {
  2. usort($subarray, function ($a, $b) {
  3. return $a['wskaznik'] <=> $b['wskaznik'];
  4. });
  5. $zm[$key] = $subarray;
  6. }

Cytat
Po pierwsze nie usort lecz uksort skoro chcesz zachowac klucze.

ja nie chcę sortować wg kluczy tylko wg wartości wskaznik, chociaż jak rozumiem trzeba tam pewnie podpiąć funkcję, która zrobi to co bym chciał

tzn działa ale nie na tą tablicę co bym chciał, działa tylko na ten wymiar tablicy najbardziej zagnieżdzony a mi chodzi o ten pierwszy czyli tak jak podałem wyżej w przykładzie

Ten post edytował wpaski 8.02.2022, 15:21:02
Go to the top of the page
+Quote Post
nospor
post 8.02.2022, 15:23:36
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ja nie powiedzialem ze uksort sortuje po kluczach, tylko je ZACHOWUJE. Czytaj ze zrozumieniem prosze.

Co do twojego kodu to FOREACH jest zbedny. Po to robisz uksort by on przelecial po tablicy a dopiero funkcja twoja do sortowania mowi po czym ma sortowac


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wpaski
post 9.02.2022, 09:30:05
Post #7





Grupa: Zarejestrowani
Postów: 206
Pomógł: 6
Dołączył: 25.12.2011

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


Jasne, jednak, nie wiem przynajmniej na razie w jaki sposób wykorzystać funkcję uksort do tego przypadku więc byłbym wdzięczny za przykład, zawsze czegoś nowego dobrze się dowiedzieć.

Tak zrobione, jak poniżej działa, choć nie jestem zadowolony z tego kodu:
https://3v4l.org/5tr8J
Go to the top of the page
+Quote Post
trueblue
post 9.02.2022, 09:38:21
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Rozwiązaniem dla Ciebie będzie funkcja uasort.
Podobnie jak robiłeś to poście #5, ale bez foreach i zapisu wartości do tablicy.
Musisz porównać wartości [0]['wskaznik'] z dwóch elementów.


--------------------
Go to the top of the page
+Quote Post
nospor
post 9.02.2022, 09:59:49
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Oczywiscie uasort jak napisal trueblue. Zrobilem literowke z tym moim uksort sad.gif Reszta sie zgadza wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wpaski
post 9.02.2022, 10:20:29
Post #10





Grupa: Zarejestrowani
Postów: 206
Pomógł: 6
Dołączył: 25.12.2011

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


  1. uasort($zm, function ($a, $b) {
  2. return $a[0]['wskaznik'] <=> $b[0]['wskaznik'];
  3. });
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: 14.08.2025 - 13:51