Lekcja 5. Tablice indeksowane i asocjacyjne w PHP
PodstawowyPo co się tego uczymy?
Zanim nauczysz się pobierać dane z bazy, musisz oswoić się z tablicami — to właśnie w formie tablicy PHP dostarczy Ci dane z każdego zapytania SQL. Bez tej lekcji Lekcja 11 (wyświetlanie danych z bazy) byłaby niezrozumiała.
Teoria
Tablica przechowuje wiele wartości w jednej zmiennej. PHP ma dwa główne rodzaje tablic:
Tablica indeksowana — elementy mają numeryczne indeksy zaczynające się od 0:
$filmy = ["Incepcja", "Matrix", "Interstellar"];
echo $filmy[0]; — wypisze "Incepcja".
Tablica asocjacyjna — elementy mają własne, nazwane klucze zamiast numerów:
$film = ["tytul" => "Incepcja", "rok" => 2010, "ocena" => 8.8];
echo $film["tytul"]; — wypisze "Incepcja".
To właśnie w formacie tablicy asocjacyjnej PHP zwraca Ci pojedynczy wiersz z bazy danych (poznasz to w Lekcji 11) — klucze tablicy odpowiadają wtedy nazwom kolumn.
Przydatne funkcje: count() (liczba elementów), array_push() (dodanie elementu), in_array() (czy wartość istnieje w tablicy), sort() (sortowanie).
Przykład z życia
Koszyk zakupowy w sklepie internetowym to w praktyce tablica — każdy dodany produkt to jeden element, a cała zawartość koszyka to lista tych elementów przechowywana (jak zobaczysz w Lekcji 17) w sesji użytkownika.
Kod (PHP)
<?php
// tablica indeksowana
$filmy = ["Incepcja", "Matrix", "Interstellar"];
echo "Pierwszy film: " . $filmy[] . "<br>";
echo "Liczba filmów: " . count($filmy) . "<br>";
$filmy[] = "Diuna"; // dopisanie kolejnego elementu na koniec
foreach ($filmy as $indeks => $tytul) {
echo "$indeks: $tytul<br>";
}
echo "<hr>";
// tablica asocjacyjna - jeden film ze szczegółami
$film = [
"tytul" => "Incepcja",
"rok" => 2010,
"ocena" => 8.8
];
echo $film["tytul"] . " (" . $film["rok"] . ") - ocena: " . $film["ocena"];
Komentarz i wyjaśnienie kodu
$filmy[] = "Diuna" to najprostszy sposób dodania elementu na koniec tablicy indeksowanej — puste nawiasy kwadratowe mówią PHP "dodaj na następny wolny indeks". W pętli foreach ( as $indeks => $tytul) pobieramy jednocześnie indeks i wartość — to przydaje się, gdy chcesz np. ponumerować listę na stronie. Tablica asocjacyjna na końcu pokazuje dokładnie taki kształt danych, jaki dostaniesz z bazy danych dla jednego wiersza — klucze ("tytul", "rok", "ocena") będą wtedy nazwami kolumn tabeli SQL.
Ćwiczenie samodzielne
Dodaj do tablicy $film nowy klucz "gatunek" i wypisz go razem z resztą danych w jednym zdaniu.
Zadania do pracy własnej
Stwórz tablicę indeksowaną z pięcioma tytułami Twoich ulubionych filmów i wypisz je w formie listy HTML (
- ) za pomocą foreach.
Stwórz tablicę asocjacyjną reprezentującą jeden produkt sklepu (nazwa, cena, ilość_magazyn) i wypisz zdanie w stylu "Produkt X kosztuje Y zł, dostępnych sztuk: Z".
Stwórz tablicę tablic (każdy element to osobna tablica asocjacyjna z tytulem i oceną filmu) reprezentującą 3 filmy, a następnie pętlą foreach wypisz listę HTML z tytułem i oceną każdego z nich — to dokładnie tak wygląda praca z wieloma wierszami danych z bazy.
- ) za pomocą foreach.
Typowe błędy
Częsty błąd to próba odwołania się do nieistniejącego indeksu/klucza (np. $filmy[10], gdy tablica ma tylko 4 elementy) — PHP zgłosi wtedy ostrzeżenie "Undefined array key". Drugi błąd: pomylenie tablicy indeksowanej z asocjacyjną i próba użycia $film[0] tam, gdzie klucze to nazwy tekstowe. Trzeci: zapomnienie, że indeksy w tablicy indeksowanej zaczynają się od 0, nie od 1.
Nawiązanie do egzaminu zawodowego
Tablice to część efektu INF.03.5.2.4 ("posługuje się typami prostymi i złożonymi") — a w połączeniu z pętlą foreach (Lekcja 4) stanowią mechanizm, którego użyjesz w KAŻDEJ lekcji od tego miejsca w dziale.