Tablice asocjacyjne
🎯 Po tej lekcji stworzysz tablicę asocjacyjną, odczytasz i zmienisz wartości po kluczu oraz dodasz nowe pola.
Wyobraź sobie wizytówkę: imię, nazwisko, telefon, e-mail. Każda informacja ma swoją etykietę — nie piszesz „pierwsza dana to Jan, druga to Kowalski", lecz „imię: Jan, nazwisko: Kowalski". Właśnie tak działa tablica asocjacyjna — zamiast numerów używa opisowych kluczy.
Klucz i wartość
Tablica asocjacyjna przechowuje pary klucz => wartość. Klucz to nazwa (string), wartość — dowolne dane:
<?php
declare(strict_types=1);
$osoba = [
'imie' => 'Anna',
'nazwisko' => 'Kowalska',
'wiek' => 28,
];
Strzałka => oddziela klucz od wartości. Każdą parę oddzielasz przecinkiem. Wcięcia i wyrównanie => to tylko kwestia czytelności — PHP tego nie wymaga.
Odczyt wartości
Żeby odczytać konkretną wartość, podajesz jej klucz w nawiasach kwadratowych:
<?php
declare(strict_types=1);
$osoba = [
'imie' => 'Anna',
'nazwisko' => 'Kowalska',
'wiek' => 28,
];
echo $osoba['imie']; // wynik: Anna
echo $osoba['nazwisko']; // wynik: Kowalska
echo $osoba['wiek']; // wynik: 28
Podgląd całej tablicy za pomocą print_r:
<?php
declare(strict_types=1);
print_r($osoba);
// wynik:
// Array
// (
// [imie] => Anna
// [nazwisko] => Kowalska
// [wiek] => 28
// )
Modyfikowanie i dodawanie pól
Zmiana istniejącego pola wygląda tak samo jak zmiana elementu tablicy indeksowanej — przypisujesz nową wartość:
<?php
declare(strict_types=1);
$produkt = [
'nazwa' => 'Kawa ziarnista',
'cena' => 24.99,
'waga' => 500,
];
// Zmień cenę:
$produkt['cena'] = 19.99;
echo $produkt['cena']; // wynik: 19.99
Żeby dodać nowe pole, po prostu przypisujesz wartość pod nowym kluczem:
<?php
declare(strict_types=1);
$produkt['opis'] = 'Arabika 100%, palona na ciemno';
$produkt['dostepny'] = true;
print_r($produkt);
// wynik:
// Array
// (
// [nazwa] => Kawa ziarnista
// [cena] => 19.99
// [waga] => 500
// [opis] => Arabika 100%, palona na ciemno
// [dostepny] => 1
// )
print_r wyświetla true jako 1 i false jako pusty string. Jeśli chcesz zobaczyć typy, użyj var_dump.Praktyczny przykład — produkt w sklepie
Oto kompletny opis produktu w sklepie internetowym:
<?php
declare(strict_types=1);
$produkt = [
'nazwa' => 'Jabłka Ligol 1 kg',
'cena' => 3.99,
'kategoria'=> 'owoce',
'dostepny' => true,
];
echo $produkt['nazwa'] . ' — ' . $produkt['cena'] . ' zł';
// wynik: Jabłka Ligol 1 kg — 3.99 zł
if ($produkt['dostepny']) {
echo 'Produkt dostępny';
} else {
echo 'Brak w magazynie';
}
// wynik: Produkt dostępny
$produkt['rabat'], gdy nie masz takiego pola) spowoduje ostrzeżenie i zwróci null. Możesz sprawdzić, czy klucz istnieje, za pomocą isset($produkt['rabat']) — zwróci true, jeśli klucz istnieje i ma wartość różną od null.Mieszanie kluczy stringowych i numerycznych
PHP pozwala mieszać klucze, ale w praktyce lepiej tego unikać — tablica powinna być albo asocjacyjna (wyłącznie stringowe klucze), albo indeksowana (wyłącznie numeryczne). Mieszanie utrudnia czytelność kodu.
W następnej lekcji nauczysz się tworzyć tablice w tablicach — czyli jak przechowywać listę produktów, gdzie każdy produkt to osobna tablica asocjacyjna.
Sprawdź się
Jak odczytać wartość klucza 'cena' z tablicy $produkt?
Do wartości tablicy asocjacyjnej w PHP dostęp uzyskujesz przez nawiasy kwadratowe z kluczem w środku: $produkt['cena']. Strzałka (->) służy do obiektów, a kropka nie jest operatorem dostępu w PHP.
Jak dodać nowe pole 'kategoria' ze wartością 'nabiał' do istniejącej tablicy $produkt?
Przypisanie $tablica['nowyKlucz'] = wartość automatycznie dodaje nowe pole do tablicy asocjacyjnej. Jeśli klucz już istnieje — wartość jest nadpisywana.
Co to jest tablica asocjacyjna?
Tablica asocjacyjna przechowuje pary klucz => wartość. Klucze są stringami (lub liczbami całkowitymi) i pełnią rolę opisowych nazw — np. 'imie', 'cena', 'opis'.
Ćwiczenie
Stwórz tablicę asocjacyjną $ksiazka opisującą dowolną książkę. Musi zawierać pola: 'tytul', 'autor', 'rok', 'cena'. Następnie zmień cenę na 39.99 i dodaj pole 'gatunek' ze swoją wartością. Wyświetl całą tablicę za pomocą print_r.
Pokaż rozwiązanie
<?php
declare(strict_types=1);
$ksiazka = [
'tytul' => 'Wiedźmin',
'autor' => 'Andrzej Sapkowski',
'rok' => 1990,
'cena' => 29.99,
];
$ksiazka['cena'] = 39.99;
$ksiazka['gatunek'] = 'fantasy';
print_r($ksiazka);
// wynik:
// Array
// (
// [tytul] => Wiedźmin
// [autor] => Andrzej Sapkowski
// [rok] => 1990
// [cena] => 39.99
// [gatunek] => fantasy
// )