INF.03 · Aplikacje internetowe PHP
Tablice indeksowane i asocjacyjne w PHP
Tablica: klucz prowadzi do wartości.
- PHP8.3
- mysqli · MariaDB
- Praktyka i diagnoza
Po tej lekcji: Odczytasz dane po indeksie i nazwanym kluczu oraz zbudujesz listę rekordów.
Zrozum mechanizm
PHP array jest uporządkowaną mapą kluczy do wartości. Typowa lista ma indeksy 0,1,2; rekord filmu może mieć klucze tytul, rok i cena_grosze. $filmy[] = … dopisuje pozycję. count() podaje liczbę elementów, nie największy indeks. Unset usuwa klucz i nie numeruje listy od nowa.
Brak klucza obsłuż przez ??, a istnienie wartości null odróżnij za pomocą array_key_exists od isset. sort() zmienia klucze listy, asort() zachowuje powiązania z kluczami, ksort() porządkuje według kluczy. Tablica tablic to prosty odpowiednik zestawu rekordów z bazy. Dane z zewnątrz waliduj, a przy HTML koduj ich prezentację.
Jak uruchamiać krótkie przykłady?
Każdy krótki przykład oznaczony własnym plikiem uruchamiaj osobno, nie doklejaj wszystkich definicji do jednego pliku. W edytorze zapisz go jako .php, a w terminalu tego folderu wpisz np. php for.php. Wtedy pokazane końce wierszy PHP_EOL są widoczne. W odpowiedzi HTML znak końca wiersza sam nie robi nowej linii na ekranie: użyj <br> albo znacznika <pre>. Wyświetl źródło pozwala zobaczyć tekst odpowiedzi.
Przykłady opisane jako fragment projektu wymagają paczki KINO / LAB i wcześniejszej konfiguracji. Nie uruchamiaj ich jako samodzielnych endpointów. Pełny plik niżej pokazuje kontekst. Funkcje h(), pole() i wymagajPost() są nasze; ich definicje wczytuje bootstrap.php.
Lista: utworzenie, indeks i dopisywanie
Kilka filmów trzymasz w jednej zmiennej. Nawiasy kwadratowe raz tworzą tablicę, a po jej nazwie służą do odczytu elementu.
Podstawowa forma: $lista = [wartosc1, wartosc2];, odczyt: $lista[indeks]
<?php
$filmy = ['Ocean', 'Kosmos'];
echo $filmy[0] . PHP_EOL;
$filmy[] = 'Las';
echo count($filmy) . PHP_EOL;
unset($filmy[1]);
echo count($filmy) . PHP_EOL;
echo ($filmy[2] ?? 'brak');
Ocean 3 2 Las
- Indeks 0 oznacza pierwszy element: Ocean. Indeks 1 wskazuje Kosmos.
- Puste
[]po nazwie tablicy dopisuje nowy element z kolejnym kluczem. count daje teraz 3. - unset usuwa klucz 1, ale nie zmienia klucza 2 na 1. Elementów jest 2, a Las nadal ma klucz 2.
-
??wybiera napis brak, jeśli klucz nie istnieje lub ma null; w tej próbie klucz 2 istnieje.
Rekord i tablica rekordów
W bazie film ma kilka pól. W PHP możesz przedstawić go jako tablicę asocjacyjną, a kilka filmów jako tablicę takich rekordów.
Podstawowa forma: $rekord = ["klucz" => wartosc];
<?php
$film = ['tytul' => 'Ocean', 'rok' => 2024];
echo $film['tytul'] . PHP_EOL;
$katalog = [$film, ['tytul' => 'Las', 'rok' => 2025]];
foreach ($katalog as $pozycja) {
echo $pozycja['tytul'] . ': ' . $pozycja['rok'] . PHP_EOL;
}
Ocean Ocean: 2024 Las: 2025
- W
"tytul" => "Ocean"lewa strona jest nazwą klucza, prawa zapisaną wartością. -
$film["tytul"]odczytuje nazwane pole. Nie pisz$film[tytul]bez cudzysłowu. - Każda
$pozycjajest całą tablicą pojedynczego filmu. Dopiero drugi nawias, np. ["rok"], wybiera jego pole.
count, in_array i sort: zapytanie o listę i jej porządek
Sama nazwa funkcji nie mówi jeszcze, czy zmienia ona tablicę. count i in_array odpowiadają na pytania; sort zmienia przekazaną tablicę.
Podstawowa forma: in_array(szukana_wartosc, tablica, true), sort(tablica)
<?php
$filmy = ['Las', 'Ocean', 'Kosmos'];
echo count($filmy) . PHP_EOL;
echo (in_array('Ocean', $filmy, true) ? 'jest' : 'brak') . PHP_EOL;
sort($filmy);
echo implode(', ', $filmy);
3 jest Kosmos, Las, Ocean
- count zwraca 3, czyli liczbę pozycji.
- in_array szuka wartości Ocean; trzeci argument true włącza porównanie ścisłe. Wynik bool zamieniamy przez ?: na jest/brak.
- sort porządkuje wartości rosnąco i nadaje klucze numeryczne od nowa. asort zachowuje powiązania wartości z kluczami, ksort sortuje według kluczy.
- implode łączy elementy w jeden napis; pierwszy argument to separator. Nie przypisuj
$filmy = sort($filmy): wynik sort to bool, a zmiana listy następuje w miejscu.
Jak czytać pozostałe zapisy w pełnym przykładzie
| Zapis | Znaczenie | Przykład użycia |
|---|---|---|
?? i ??= | a ?? b wybiera b dla braku/null; a ??= b zapisuje b tylko, gdy a nie istnieje lub ma null. Nie reagują na0 ani pusty napis. | $_SESSION["koszyk"] ??= []; |
Sprawdź w działaniu
Tablica: klucz prowadzi do wartości — sprawdź w modelu
Model w przeglądarce wyjaśnia mechanizm na fikcyjnych danych. Nie wykonuje PHP ani zapytań SQL i nie tworzy kont. Prawdziwe skrypty uruchomisz lokalnie z paczki.
Przewidź rezultat, wykonaj próbę i wyjaśnij, która decyzja po stronie serwera decyduje o wyniku.
Uruchom krok po kroku
Odczytaj filmy[0] oraz film["tytul"]. Zmień wartość jednego klucza. Usuń pozycję listy i sprawdź count oraz klucze. Dodaj drugi rekord z tymi samymi nazwami pól i przejdź po rekordach przez foreach.
Plik wzorcowy: public/podstawy/05-tablice.php
<?php
$filmy = ['Podróż', 'Kosmos'];
$filmy[] = 'Dom';
$film = ['tytul' => 'Podróż', 'rok' => 2024, 'cena_grosze' => 1299];
echo $filmy[0]."\n";
echo $film['tytul'].' ('.$film['rok'].")\n";
echo count($filmy)."\n";
echo $film['opis'] ?? 'Brak opisu';
Pobierz i odtwórz projekt
W „Źródłach i materiałach” na końcu pobierz KINO / LAB.zip. Rozpakuj całość; instrukcja START.txt opisuje konfigurację. Pierwsze 6 przykładów w public/podstawy działa bez bazy. Dalsze wymagają lokalnej MariaDB 11.4, importu schema.sql i lokalnego konta bazy z minimalnymi prawami. Gotowa paczka pokazuje całość, ale w tej lekcji wykonaj opisane kroki i własne zadanie.
Ćwiczenie z pomocą · samodzielna praca
Twoja próba — podpowiedzi otwieraj po kolei
Utwórz tablicę 3 filmów z tytułem i rokiem. Wypisz tylko tytuły filmów od 2024 roku.
Lista zawiera wyłącznie rekordy z rok>=2024; klucze nie są mylone z indeksami.
? Potrzebujesz pomocy? Rozwiązuj krok po kroku.
Krok 1 — pokaż podpowiedź
Odszukaj wskazany plik i zapisz przewidywany rezultat przed zmianą.
Krok 2 — pokaż podpowiedź
Zmień jedną rzecz. Sprawdź metodę żądania, dane i odpowiedź lub wynik programu.
Krok 3 — pokaż podpowiedź
Wykonaj próbę graniczną lub błędną. Porównaj także stan bazy lub sesji, nie tylko komunikat.
Otwórz tylko tyle podpowiedzi, ile potrzebujesz. Po każdym kroku wróć do zadania i sprawdź wynik.
Podsumowanie
Co warto zapamiętać
- Odczytasz dane po indeksie i nazwanym kluczu oraz zbudujesz listę rekordów.
- Potrafisz wskazać w kodzie przyczynę wyniku i zaplanować próbę błędnych danych.
- Nie oddajesz haseł, pliku config.local.php ani wartości cookie.
Dalej na swoim koncie
Rozgrzewki, quiz i zadania są w biurku ucznia.
Teoria jest otwarta dla wszystkich. Żeby rozwiązywać zadania, zapisywać szkice i widzieć swój postęp, zaloguj się.
Zaloguj się →