Prawidłowo – w PHP tablice asocjacyjne to takie, w których indeks (klucz) może być dowolnym napisem, czyli łańcuchem znaków. Z technicznego punktu widzenia PHP w ogóle nie rozróżnia osobnego typu „mapa” czy „słownik” – wszystko jest tablicą, a to, czy używasz indeksów numerycznych czy tekstowych, zależy wyłącznie od ciebie. Przykład: $uzytkownik = ['imie' => 'Jan', 'wiek' => 25, 'miasto' => 'Kraków']; Tutaj 'imie', 'wiek' i 'miasto' to właśnie napisy pełniące rolę kluczy. Dzięki temu kod staje się czytelniejszy, bo zamiast $dane[0], $dane[1] masz jasne $dane['imie'], $dane['wiek']. W praktyce takie tablice asocjacyjne bardzo często wykorzystuje się do przechowywania rekordów z bazy danych (np. wynik fetch_assoc w MySQLi), konfiguracji aplikacji, danych z formularzy ($_POST, $_GET) czy parametrów przekazywanych do funkcji. Co ważne, kluczem może być też liczba całkowita, ale w definicji tablic asocjacyjnych zwykle podkreśla się, że nie jesteśmy ograniczeni do automatycznego indeksowania 0,1,2,..., tylko możemy sami nadawać znaczące klucze tekstowe. W dobrych praktykach programowania webowego w PHP przyjmuje się, że tam, gdzie dane mają strukturę „nazwa pola → wartość”, używamy tablic asocjacyjnych, bo to zmniejsza ryzyko pomyłek i ułatwia późniejsze utrzymanie kodu. Moim zdaniem, im szybciej człowiek przyzwyczai się do świadomego używania kluczy tekstowych, tym łatwiej mu będzie później przeskoczyć na inne języki i struktury danych, jak mapy czy słowniki.
W PHP pojęcie tablicy asocjacyjnej bywa mylone z kilkoma innymi konstrukcjami, dlatego łatwo wpaść w pułapkę skojarzeń. Tablica asocjacyjna nie ma nic wspólnego z liczbą wymiarów – fakt, że jakaś tablica jest wielowymiarowa (np. tablica tablic), wcale nie oznacza, że jest asocjacyjna. Możesz mieć tablicę dwuwymiarową z indeksami czysto numerycznymi i będzie to po prostu zwykła tablica indeksowana liczbami, tylko zagnieżdżona. Sam „wymiar” dotyczy struktury zagnieżdżenia, a nie sposobu adresowania elementów. Podobnie nie jest prawdą, że w tablicy asocjacyjnej w każdej komórce musi być inna tablica. To jest raczej opis tablicy zagnieżdżonej (np. do reprezentowania wierszy i kolumn), a nie definicja tablicy asocjacyjnej. Elementem tablicy asocjacyjnej może być cokolwiek: liczba, string, obiekt, null, inna tablica – ale to, co ją wyróżnia, to klucze tekstowe, a nie typ przechowywanych wartości. Kolejne typowe nieporozumienie to przekonanie, że elementy w tablicy zawsze są indeksowane od zera. W wielu językach (np. w C, Javie) rzeczywiście tablice „klasyczne” startują od indeksu 0, więc łatwo to nawykowo przenieść do PHP. Natomiast PHP jest pod tym względem bardziej elastyczny: możesz mieć tablicę z kluczami 0, 1, 2, ale możesz też mieć klucze 'imie', 'email' albo nawet mieszane – częściowo numeryczne, częściowo tekstowe. W tablicy asocjacyjnej klucz jest wartością logicznie opisującą dany element, a nie tylko kolejnym numerem pozycji. Z mojego doświadczenia wynika, że wiele błędów w kodzie bierze się z tego, że ktoś traktuje tablicę asocjacyjną jak „zwykłą tablicę od zera”, a potem odwołuje się do nieistniejących indeksów numerycznych. Dobra praktyka to świadome korzystanie z kluczy, nadawanie im sensownych nazw i pamiętanie, że w PHP tablica asocjacyjna to po prostu struktura klucz → wartość, gdzie kluczem bardzo często jest właśnie napis, a nie liczba.