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
// )
💡 Bool w print_r: 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
⚠️ Nieistniejący klucz: Odczyt nieistniejącego klucza (np. $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?

Jak dodać nowe pole 'kategoria' ze wartością 'nabiał' do istniejącej tablicy $produkt?

Co to jest tablica asocjacyjna?

Ć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
// )