Tablica asocjacyjna w PHP z przykładami

Definiowanie indeksu tablicy

Na poprzedniej lekcji pokazałem w jaki sposób utworzyć tablicę przechowującą dane uczniów. O ile wiedzieliśmy, że indeks “0” odnosił się do imienia, “1” do nazwiska, a “2” do daty urodzenia, o tyle inna osoba korzystająca z naszego kodu wcale nie musi tego wiedzieć.

Nie mówiąc już o modyfikacjach skryptu po latach…

Wtedy, nawet jeśli masz pamięć absolutną, nie będziesz pamiętać który indeks odpowiada konkretnemu parametrowi.

Tablice asocjacyjne w PHP

Istnieje pewien mechanizm, który pomaga się łatwiej odnaleźć w tworzonych tablicach. Chodzi tu o definiowanie własnych indesków dla tablic, czyli tzw. tablicę asocjacyjną.

Zamiast pisać $uczen[0] = ‘Marcin’, możemy użyć $uczen[‘imie’] = ‘Marcin’.

Wtedy struktura danych staje się dużo bardziej czytelna i przyjazna.

Zobacz poniższy listing:

<?php 
  $uczen['imie'] = "Janek";
  $uczen['nazwisko'] = "Kowalski"; 
  $uczen['dataUrodzenia'] = "14-10-1995";

  var_dump($uczen);

W ten sposób uzyskasz jasną strukturę danych ucznia, do których bardzo łatwo się dostać. Jeśli zobaczysz w kodzie: $uczen[‘imie’] możesz założyć, że w tym indeksie kryje się imię danego ucznia.

Możesz użyć polecenia var_dump, wyświetlić na ekranie całą zmienną $uczen wraz ze wszystkimi dodanymi wartościami.

Posłużyłem się tutaj tym samym przykładem co ostatnim razem. Jak widać, zestawienie danych wygląda nieco bardziej czytelnie. Sposób indeksowania pozostawiam do Waszego wyboru. Istnieje zupełna dowolność, jak komu wygodniej.

Zagnieżdżona tablica asocjacyjna

Zobacz teraz przykład, gdzie zamiast pojedynczego ucznia, mamy całą klasę uczniów. W terminologii programistycznej, tablicę, która przechowuje listę tablic asocjacyjnych.

Przejrzyj poniższy listing:

<?php
    $classroom = array();

    $student['firstName'] = 'Janek';
    $student['lastName'] = 'Kowalski';
    $student['birthday'] = '15-08-2000';

    $classroom[] = $student;

    $student['firstName'] = 'Mirek';
    $student['lastName'] = 'Nowak';
    $student['birthday'] = '2-11-2001';

    $classroom[] = $student;

    $student['firstName'] = 'Marcin';
    $student['lastName'] = 'Wesel';
    $student['birthday'] = '19-05-1989';

    $classroom[] = $student;

    var_dump($classroom);

Zmienna $classroom przechowuje informacje o wszystkich uczniach w klasie. W zmiennej $student tworzymy informacje o pojedynczym uczniu, po czym dodajemy je jako kolejny rekord do tablicy $classroom.

Po wywołaniu polecenia var_dump na całej klasie, otrzymamy coś takiego:

array(3) { 
  [0]=> array(3) { ["firstName"]=> string(5) "Janek" ["lastName"]=> string(8) "Kowalski" ["birthday"]=> string(10) "15-08-2000" } 
  [1]=> array(3) { ["firstName"]=> string(5) "Mirek" ["lastName"]=> string(5) "Nowak" ["birthday"]=> string(9) "2-11-2001" } 
  [2]=> array(3) { ["firstName"]=> string(6) "Marcin" ["lastName"]=> string(5) "Wesel" ["birthday"]=> string(10) "19-05-1989" } 
}

Czyli tablicę trzyelementową z wyszczególnionymi danymi każdego z uczniów.

W kolejnej lekcji zajmiemy się pętlą foreach. Przy jej pomocy bardzo łatwo przejdziemy po wszystkich wartościach przechowywanych w tablicy – niezależnie od tego, czy jest to tablica asocjacyjna czy klasyczna. Zapraszam!

Check out arrays in PHP on abcphp.net.

Spis lekcji w rozdziale trzecim

Poprzednia lekcja: Tablice wielowymiarowe Następna lekcja: Pętla Foreach

4 Responses on this post

  1. Po pierwsze, super kurs, wielkie dzięki i wyrazy uznania za opracowanie.
    W trakcie ćwiczeń korzystam najczęściej z localhost’a, a piszę w Visual Studio Code. Po wprowadzeniu zmiany w kodzie zapisuję zmiany, ale w przeglądarce są one widoczne dopiero po kilkudziesięciu sekundach. Klikam Ctrl+F5 i Ctrl+R i wprowadzone zmiany widzę dopiero po kilku kliknięciach. Z czego to wynika? Można to jakoś przyspieszyć. Testowanie w nowym oknie w trybie prywatnym działa identycznie.
    Sprawdzałem też na zew. serwerze i efekt jest identyczny.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *