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ść.
Wyzwanie
ŁatwyOtrzymasz 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);
?>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
1Zaawansowane funkcje
Funkcje anonimoweDomknięcia i „use”Funkcje strzałkoweFunkcje zwrotneUżywanie „call_user_func”Funkcje zmiennePrzekazywanie przez referencjęFunkcje rekurencyjnePowtórka: przegląd funkcji4Tablice wielowymiarowe
Tworzenie tablicy 2DDostęp do elementów tablicy 2DModyfikowanie elementów tablicy 2DIterowanie z użyciem zagnieżdżonych pętliAsocjacyjne tablice 2DPodsumowanie: ćwiczenie z prostą siatką2Zaawansowane operacje na tablicach
Dodawanie za pomocą 'array_push'Usuwanie za pomocą 'array_pop'Dodawanie za pomocą 'array_unshift'Usuwanie za pomocą 'array_shift'Łączenie tablic indeksowanychŁączenie tablic asocjacyjnychWyodrębnianie za pomocą 'array_slice'Wyszukiwanie wartości za pomocą 'in_array'Wyszukiwanie kluczy za pomocą 'array_search'Podsumowanie: ćwiczenie z playlistą3Sortowanie tablic
Sortowanie tablic indeksowanych rosnącoSortowanie tablic indeksowanych malejącoSortowanie tablic asocjacyjnych według wartościSortowanie tablic asocjacyjnych według kluczaSortowanie w kolejności naturalnejSortowanie niestandardowe za pomocą 'usort'Podsumowanie: sortowanie tabeli wynikówPoćwicz samodzielnie: Kompilator PHP online