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]

tablica-lista.phpphp
<?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');
Wynik
Ocean
3
2
Las
  1. Indeks 0 oznacza pierwszy element: Ocean. Indeks 1 wskazuje Kosmos.
  2. Puste [] po nazwie tablicy dopisuje nowy element z kolejnym kluczem. count daje teraz 3.
  3. unset usuwa klucz 1, ale nie zmienia klucza 2 na 1. Elementów jest 2, a Las nadal ma klucz 2.
  4. ?? 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];

tablica-rekord.phpphp
<?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;
}
Wynik
Ocean
Ocean: 2024
Las: 2025
  1. W "tytul" => "Ocean" lewa strona jest nazwą klucza, prawa zapisaną wartością.
  2. $film["tytul"] odczytuje nazwane pole. Nie pisz $film[tytul] bez cudzysłowu.
  3. Każda $pozycja jest 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)

funkcje-tablic.phpphp
<?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);
Wynik
3
jest
Kosmos, Las, Ocean
  1. count zwraca 3, czyli liczbę pozycji.
  2. in_array szuka wartości Ocean; trzeci argument true włącza porównanie ścisłe. Wynik bool zamieniamy przez ?: na jest/brak.
  3. 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.
  4. 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

ZapisZnaczeniePrzykł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.

Ta interakcja wymaga włączonego JavaScriptu.

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

public/podstawy/05-tablice.phpphp
<?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.

Oczekiwany rezultat
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ć

  1. Odczytasz dane po indeksie i nazwanym kluczu oraz zbudujesz listę rekordów.
  2. Potrafisz wskazać w kodzie przyczynę wyniku i zaplanować próbę błędnych danych.
  3. 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ę →
Źródła i dalsza nauka