Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]sortowanie tablicy
Forum PHP.pl > Forum > Przedszkole
wpaski
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
wpaski
tam mogą też być inne klucze, a ma sortować wg wskaznik, zapomniałem o tym wspomnieć sorki, więc to rozwiązanie odpada
nospor
Po pierwsze nie usort lecz uksort skoro chcesz zachowac klucze.
A po drugie pokaz co splodziles do tej pory
wpaski
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
nospor
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
wpaski
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
trueblue
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.
nospor
Oczywiscie uasort jak napisal trueblue. Zrobilem literowke z tym moim uksort sad.gif Reszta sie zgadza wink.gif
wpaski
  1. uasort($zm, function ($a, $b) {
  2. return $a[0]['wskaznik'] <=> $b[0]['wskaznik'];
  3. });
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.