Menu
Coddy logo textTech

Sortowanie tablic asocjacyjnych według wartości

Część sekcji Logika i przepływ programu ścieżki PHP w Coddy. Lekcja 22 z 68.

Podczas pracy z tablicami asocjacyjnymi często trzeba sortować je według wartości, zachowując relacje między kluczami a wartościami. PHP udostępnia w tym celu dwie wyspecjalizowane funkcje: asort() do sortowania rosnąco i arsort() do sortowania malejąco.

Oto, jak działa asort(), aby sortować według wartości w kolejności rosnącej:

<?php
$students = [
    "Alice" => 85,
    "Bob" => 92,
    "Charlie" => 78,
    "Diana" => 96
];

asort($students);
print_r($students);
// Wyświetla: Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 [Diana] => 96 )
?>

Zauważ, że oceny są teraz uporządkowane od najniższej do najwyższej, ale imię i nazwisko każdego ucznia nadal są prawidłowo powiązane z jego oceną. To kluczowa zaleta asort() w porównaniu ze zwykłym sort(). Zachowuje powiązanie między kluczami a wartościami.

W przypadku porządku malejącego arsort() działa podobnie, ale układa wartości od najwyższej do najniższej:

<?php
arsort($students);
print_r($students);
// Wyświetla: Array ( [Diana] => 96 [Bob] => 92 [Alice] => 85 [Charlie] => 78 )
?>

Obie funkcje modyfikują bezpośrednio oryginalną tablicę, podobnie jak ich odpowiedniki dla tablic indeksowanych. Dzięki temu świetnie nadają się do porządkowania danych, takich jak oceny uczniów czy ceny produktów, oraz do każdego przypadku, w którym chcesz sortować według wartości, zachowując pary klucz-wartość.

challenge icon

Wyzwanie

Łatwy

Otrzymasz jedno wejście: tablicę asocjacyjną zawierającą imiona i nazwiska pracowników oraz ich wynagrodzenia w formacie JSON. Odczytaj wejście, przekształć ciąg JSON w tablicę, użyj arsort(), aby posortować pracowników według wynagrodzenia w kolejności malejącej (od najwyższego do najniższego), a następnie wyświetl posortowaną tablicę za pomocą print_r().

Format wejścia: Jeden wiersz zawierający obiekt JSON z imionami i nazwiskami pracowników jako kluczami oraz wynagrodzeniami jako wartościami (przykład: {"John":45000,"Sarah":52000,"Mike":38000,"Lisa":61000})

Oczekiwane wyjście: Posortowana tablica asocjacyjna w kolejności malejącej według wartości wynagrodzeń, wyświetlona za pomocą print_r()

Spróbuj swoich sił

<?php
// Odczytaj dane wejściowe
$input = fgets(STDIN);

// Przekształć JSON w tablicę asocjacyjną
$employees = (array)json_decode($input, true);

// TODO: Napisz poniżej kod, który posortuje tablicę według wynagrodzenia w kolejności malejącej


// Wyświetl posortowaną tablicę
print_r($employees);
?>
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator PHP online