Która z wymienionych funkcji języka PHP sortuje tablicę asocjacyjną według wartości, zachowując powiązanie wartości z ich kluczami (indeksami)?
A.
asort()
B.
sort()
C.
rsort()
D.
ksort()
Funkcja asort() jest tutaj właściwym wyborem, bo sortuje tablicę według wartości, ale nie zrywa powiązania między kluczem a wartością. To jest bardzo ważne przy tablicach asocjacyjnych, gdzie klucz ma znaczenie biznesowe albo techniczne, np. nazwa użytkownika, identyfikator produktu, kod województwa czy login. Przykład: jeśli masz tablicę ocen uczniów typu Jan => 4, Ola => 5, Adam => 3, to po użyciu asort() oceny zostaną uporządkowane rosnąco, ale dalej będzie wiadomo, która ocena należy do której osoby. Moim zdaniem to jedna z tych funkcji PHP, które warto dobrze zapamiętać, bo w praktyce pojawia się często przy rankingach, listach cen, statystykach czy filtrowaniu danych przed wyświetleniem na stronie. Dobra praktyka jest taka, żeby przed sortowaniem świadomie zdecydować, czy ważniejsze są wartości, czy klucze. asort() sortuje po wartościach i zachowuje klucze, ksort() sortuje po kluczach, a zwykłe sort() przebudowuje indeksy. W projektach webowych ma to znaczenie, bo przypadkowe przeindeksowanie tablicy może zepsuć logikę aplikacji, np. mapowanie ID rekordu na jego nazwę.
W tym pytaniu najłatwiej pomylić ogólne sortowanie tablicy z sortowaniem tablicy asocjacyjnej. W PHP nie każda funkcja sortująca zachowuje klucze, a to jest tutaj sedno sprawy. ksort() faktycznie pracuje na tablicy asocjacyjnej i zachowuje powiązania, ale sortuje według kluczy, nie według wartości. Przyda się na przykład wtedy, gdy chcesz uporządkować dane alfabetycznie po nazwach kluczy, np. miasta, kody lub identyfikatory tekstowe. Nie spełnia jednak warunku z pytania, bo wartości nie są głównym kryterium sortowania. rsort() sortuje wartości malejąco, ale działa jak klasyczne sortowanie indeksowane i nadaje tablicy nowe indeksy numeryczne. To oznacza, że dla tablic asocjacyjnych może zniszczyć istotne powiązanie między kluczem i wartością. Podobny problem występuje przy sort(), tylko że ono sortuje rosnąco. Te funkcje są dobre dla zwykłych list, np. tablicy liczb albo nazw produktów bez specjalnych kluczy, ale nie wtedy, gdy klucz niesie informację. Typowy błąd myślowy polega na tym, że widzimy słowo sort i zakładamy, że chodzi o dowolne sortowanie. W PHP trzeba patrzeć dokładniej: litera a w asort() kojarzy się z associative, czyli z tablicą asocjacyjną, a funkcja zachowuje klucze. Z mojego doświadczenia, przy pracy z danymi z formularzy, baz danych albo konfiguracji aplikacji to rozróżnienie naprawdę oszczędza sporo nerwów.