W tym artykule 16 sekcji
Tablice w PHP — od podstaw do sortowania i mapowania
Zakres: PHP 8.4–8.5. Materiał edukacyjny dla początkujących i osób na wczesnym poziomie średniozaawansowanym.
Tablica to mapa kluczy i wartości
Tablica w PHP jest uporządkowaną mapą: każda wartość ma klucz, a elementy mają kolejność, w której można po nich przejść. Klucz wskazuje jedną wartość. Ponowne przypisanie pod ten sam klucz zastępuje tę wartość, nie dokłada drugiej obok niej. Wartością może być również inna tablica.
„Tablica indeksowana” i „tablica asocjacyjna” opisują sposoby użycia tego samego typu array. W pierwszym przypadku zwykle pracujemy z kluczami całkowitymi, w drugim z nazwami, np. name. Jedna tablica może łączyć oba rodzaje kluczy i wartości różnych typów.
W tej lekcji przejdziemy od tworzenia i odczytu danych przez operacje zmieniające tablicę do sortowania, mapowania, filtrowania i agregacji. Ważne będą trzy pytania: czy operacja zmienia wejście, co zwraca oraz co robi z kluczami. To pomaga wybrać właściwe narzędzie bez zapamiętywania samych nazw funkcji.
Każdy blok PHP uruchamiaj osobno jako plik, np. php example.php. Każdy sam inicjalizuje dane; nie wymaga wykonania poprzedniego bloku.
Tworzenie tablic: lista i nazwane pola
Zapis [] jest krótką składnią tworzenia tablicy. Zapis array(...) również jest poprawny; w tej lekcji stosujemy spójnie krótszą postać. Pusta tablica to [].
W prostej liście utworzonej bez jawnych kluczy kolejne elementy dostają klucze 0, 1, 2. Nie jest to reguła dla każdej tablicy z kluczami liczbowymi: klucze można nadawać samodzielnie, zaczynać od innej liczby i pozostawiać luki.
W zapisie klucz => wartość lewa strona identyfikuje element, prawa jest jego zawartością. Nazwane klucze ułatwiają opis danych osoby czy konfiguracji. Dostęp $person['name'] oznacza odczyt konkretnego pola, a nie elementu o pozycji nazwanej „name”.
Lista owoców i dane osoby
<?php
$fruits = ['apple', 'pear', 'plum'];
$person = ['name' => 'Jan', 'age' => 30];
echo $fruits[0], "\n";
echo $person['name'], "\n";
Oczekiwany wynik:
apple
Jan
Konwersja kluczy i kolizje
Klucze tablic PHP są typu int lub string. Niektóre wartości użyte jako klucze są konwertowane. String "0" oznacza ten sam klucz co liczba 0. String "8" zostaje kluczem całkowitym 8, ale "08" pozostaje stringiem. Wartość true staje się kluczem 1, a false kluczem 0.
Poniżej drugie przypisanie zastępuje wartość pierwszego. Jeśli klucz jest identyfikatorem, zastanów się, czy jego zapis ma znaczenie: "08" i 8 nie wskazują tu tego samego elementu.
Nie stosuj ułamków jako praktycznych kluczy. Niejawna konwersja np. 1.5 do 1 z utratą precyzji jest deprecated od PHP 8.1. Również null jest konwertowany do klucza pustego stringa "", ale w PHP 8.5 użycie null jako offsetu tablicy emituje E_DEPRECATED. Od tej wersji deprecated jest też null jako argument klucza w array_key_exists(). Jeżeli naprawdę potrzebujesz pustego klucza, podaj jawnie "". Wartość null pod zwykłym kluczem pozostaje dozwolona — to inna sytuacja.
Dopisywanie przez [] zależy od historii kluczy całkowitych, nie od liczby elementów. Po przypisaniu klucza 10 i usunięciu go przez unset() kolejne dopisanie otrzyma klucz 11. Szczególny przypadek: po nadaniu pustej tablicy klucza -5 dopisanie otrzyma -4 w docelowych 8.4–8.5. Nie przenoś tutaj starego wyniku 0 z PHP 8.2.
Ten sam klucz zapisany jako int i string
<?php
$data = [0 => 'first'];
$data['0'] = 'replacement';
$data['08'] = 'padded';
$data[8] = 'integer';
foreach ($data as $key => $value) {
echo $key, '=', $value, "\n";
}
Oczekiwany wynik:
0=replacement
08=padded
8=integer
Odczyt, zapis i dopisywanie
Odczyt korzysta z nawiasów kwadratowych z konkretnym kluczem. Przypisanie pod istniejący klucz zmienia jego wartość, a przypisanie pod nowy dodaje element. Zapis bez klucza, $numbers[] = 60, dopisuje wartość pod automatycznie dobranym kluczem całkowitym.
Klucz 10 nie oznacza dziesiątego elementu. Poniższa tablica ma tylko cztery elementy, choć jednym z kluczy jest 10. Funkcja count() zwraca liczbę elementów, a nie największy klucz ani następny wolny indeks. Nie wyznaczaj następnego klucza za pomocą count($numbers); do zwykłego dopisywania użyj [].
Takie rozróżnienie przyda się po usuwaniu i filtrowaniu, kiedy numeracja może mieć luki. Klucz jest identyfikatorem elementu; pozycja jest jego miejscem w aktualnej kolejności.
Zmiana wartości i jawny klucz
<?php
$numbers = [10, 20];
$numbers[1] = 25;
$numbers[] = 30;
$numbers[10] = 100;
echo $numbers[1], "\n";
echo count($numbers), "\n";
foreach ($numbers as $key => $value) {
echo $key, '=', $value, "\n";
}
Oczekiwany wynik:
25
4
0=10
1=25
2=30
10=100
Brak klucza, null i wartość domyślna
Bezpośredni odczyt brakującego klucza w PHP 8 zgłasza E_WARNING i daje null. Stare określenie „Notice: Undefined index” nie opisuje docelowego zakresu. Zwykle najpierw określ, czego chcesz się dowiedzieć:
array_key_exists('name', $data): czy klucz istnieje, nawet gdy jego wartością jestnull;isset($data['name']): czy element istnieje i ma wartość różną odnull;$data['name'] ?? 'fallback': wartość, jeśli jest ustawiona i nie jestnull; w przeciwnym razie fallback, bez ostrzeżenia o braku klucza.
Te narzędzia nie są zamienne. Jeżeli null ma znaczyć „pole jest obecne, ale nie ma wartości”, test samego isset() nie odróżni go od braku pola.
| Stan elementu | isset | array_key_exists | Wynik ?? ‘fallback’ | empty |
|---|---|---|---|---|
| brak klucza | false | false | ‘fallback’ | true |
| null | false | true | ‘fallback’ | true |
| 0 | true | true | 0 | true |
| “0” | true | true | “0” | true |
| false | true | true | false | true |
| “” | true | true | “” | true |
empty() sprawdza brak lub wartość falsey, nie samo istnienie klucza. Może więc odrzucić string "0", który w twoim formularzu jest prawidłową wartością. Operator ?? zachowuje 0, false i pusty string — nie zastępuje ich fallbackiem.
Szukanie wartości jest jeszcze innym pytaniem. Jeśli używasz in_array() do danych mieszanych, parametr true włącza porównanie także typów; nie myl szukania wartości ze sprawdzaniem klucza.
Istniejący null a brak pola
<?php
$data = ['name' => null, 'count' => 0];
echo isset($data['name']) ? 'true' : 'false', "\n";
echo array_key_exists('name', $data) ? 'true' : 'false', "\n";
echo $data['name'] ?? 'fallback', "\n";
echo $data['missing'] ?? 'fallback', "\n";
echo $data['count'] ?? 99, "\n";
Oczekiwany wynik:
false
true
fallback
fallback
0
Tablice zagnieżdżone i różne typy danych
Wartość elementu może być kolejną tablicą. Nie powstaje wtedy drugi rodzaj typu: przechodzisz przez następne poziomy tej samej struktury. Najpierw wybierasz użytkownika, potem pole, następnie element listy umiejętności.
Dane można mieszać: osoba może mieć nazwę jako string, wiek jako int, znacznik aktywności jako bool oraz umiejętności jako tablicę. Czytelne klucze pomagają pokazać, co reprezentują wartości. Mała macierz liczb działa analogicznie: $matrix[1][2] odczytuje element drugiego wiersza pod kluczem 2.
W poniższym przykładzie strukturę znamy, więc bezpośredni odczyt jest uzasadniony. Przy danych z zewnątrz samo założenie, że istnieją wszystkie poziomy i mają oczekiwane typy, nie wystarcza.
Odczyt z listy użytkowników
<?php
$users = [
['name' => 'Jan', 'skills' => ['PHP', 'JavaScript']],
['name' => 'Anna', 'skills' => ['Python']],
];
$matrix = [[1, 2, 3], [4, 5, 6]];
echo $users[0]['name'], "\n";
echo $users[1]['skills'][0], "\n";
echo $matrix[1][2], "\n";
Oczekiwany wynik:
Jan
Python
6
Dodawanie i usuwanie: obserwuj stan po operacji
Operacje mutujące zmieniają przekazaną tablicę. Ich wynik zwracany nie musi być nową tablicą:
[]dopisuje element;array_push()dopisuje wartości na końcu;array_unshift()dodaje na początku i reindeksuje klucze liczbowe od zera, zachowując klucze nazwane;array_pop()usuwa ostatnią wartość i ją zwraca;array_shift()usuwa pierwszą wartość i ją zwraca; reindeksuje klucze liczbowe;unset($a[$key])usuwa wskazany klucz bez automatycznego reindeksowania pozostałych;array_splice()operuje na pozycji w kolejności tablicy, zwraca usunięty wycinek i reindeksuje klucze liczbowe.
array_push() oraz array_unshift() zwracają liczbę elementów po operacji, nie tablicę. Dla pustej tablicy array_pop() i array_shift() zwracają null.
W drugim przykładzie po shift() mamy [2, 3, 4]. Usunięcie klucza 1 zostawia pary 0 => 2, 2 => 4. Następnie splice(..., 1, 2) zaczyna od drugiej pozycji, nie od klucza 1: usuwa dostępny element 4. Pokazanie pośrednich stanów jest ważniejsze niż długa lista nazw funkcji.
W wyniku drugiego przykładu pierwsze dwie linie to wartości zwrócone przez array_pop() i array_shift(). Cztery bloki Array pokazują kolejno: stan po array_shift(), stan po unset(), usunięty wycinek w $removed i końcowy stan $numbers.
Dodawanie na koniec i początek
<?php
$fruits = ['apple', 'pear'];
$fruits[] = 'plum';
$afterPush = array_push($fruits, 'cherry');
$afterUnshift = array_unshift($fruits, 'peach');
echo $afterPush, '/', $afterUnshift, "\n";
foreach ($fruits as $key => $value) {
echo $key, '=', $value, "\n";
}
Oczekiwany wynik:
4/5
0=peach
1=apple
2=pear
3=plum
4=cherry
Klucz w unset a pozycja w splice
<?php
$numbers = [1, 2, 3, 4, 5];
echo array_pop($numbers), "\n";
echo array_shift($numbers), "\n";
print_r($numbers);
unset($numbers[1]);
print_r($numbers);
$removed = array_splice($numbers, 1, 2);
print_r($removed);
print_r($numbers);
Oczekiwany wynik:
5
1
Array
(
[0] => 2
[1] => 3
[2] => 4
)
Array
(
[0] => 2
[2] => 4
)
Array
(
[0] => 4
)
Array
(
[0] => 2
)
foreach: wartości albo pary klucz–wartość
Pętla foreach ($data as $value) udostępnia kolejne wartości. Wariant foreach ($data as $key => $value) udostępnia również rzeczywisty klucz każdego elementu w kolejności iteracji. Nie potrzebujesz ciągłych indeksów.
Zwykła pętla jest dobrym pierwszym wyborem, gdy chcesz wypisać dane lub wykonać kilka różnych operacji dla każdego elementu. Gdy potrzebujesz tablicy przekształconych wartości, później pokażemy array_map(); gdy wybierasz część elementów — array_filter().
Uwaga na wariant z referencją &$value: może zmieniać wartości wejścia, a po zakończeniu pętli zmienna nadal może odnosić się do ostatniego elementu. Trzeba świadomie przerwać tę referencję przez unset($value). W przykładach podstawowych pozostajemy przy pętli po wartości.
Iteracja bez ciągłej numeracji
<?php
$data = ['x' => 1, 4 => 2];
foreach ($data as $key => $value) {
echo $key, ': ', $value, "\n";
}
foreach ($data as $value) {
echo $value, "\n";
}
Oczekiwany wynik:
x: 1
4: 2
1
2
Łączenie: merge, suma tablic i replace
Wybór funkcji zależy od tego, czy potrzebujesz zebrać wszystkie wartości, zachować lewy element przy kolizji czy zastąpić go prawym. Wszystkie poniższe operacje tworzą wynik bez zmiany tablicy $left.
| Operacja | Kolidujący klucz tekstowy | Kolidujący klucz całkowity | Klucze całkowite w wyniku |
|---|---|---|---|
| array_merge | prawa wartość wygrywa | obie wartości dopisywane | reindeksowane od 0 |
| + | lewa wartość zostaje | lewa wartość zostaje | zachowane |
| array_replace | prawa wartość wygrywa | prawa wartość wygrywa | zachowane |
Operator + jest sumą tablic, nie dopisaniem wszystkich ich wartości. Dla kluczy już obecnych po lewej pomija prawy element. array_replace() zastępuje wartości pod kolidującymi kluczami i nie jest operacją rekurencyjną: zagnieżdżonego łączenia nie omawiamy tutaj.
W array_merge() nie przenoś na klucze liczbowe reguły „prawa wartość nadpisuje lewą”. Odróżnienie liczb od nazw jest najważniejszą częścią tego kontrastu.
Trzy operacje na tej samej parze danych
<?php
$left = [2 => 'left-number', 'x' => 'left'];
$right = [2 => 'right-number', 'x' => 'right', 7 => 'seven'];
print_r(array_merge($left, $right));
print_r($left + $right);
print_r(array_replace($left, $right));
Oczekiwany wynik:
Array
(
[0] => left-number
[x] => right
[1] => right-number
[2] => seven
)
Array
(
[2] => left-number
[x] => left
[7] => seven
)
Array
(
[2] => right-number
[x] => right
[7] => seven
)
Sortowanie: po czym, w którą stronę i z jakimi kluczami
Sześć podstawowych funkcji sortowania zmienia wejściową tablicę. Zwracają true, a nie posortowaną tablicę. Po wywołaniu odczytaj zmienioną zmienną; przypisanie $sorted = sort($data) nie zapisze w $sorted tablicy.
| Funkcja | Porządek | Kierunek | Powiązanie klucz–wartość | Mutuje | Zwraca |
|---|---|---|---|---|---|
| sort | wartości | rosnąco | nie; nowe klucze 0..n-1 | tak | true |
| rsort | wartości | malejąco | nie; nowe klucze 0..n-1 | tak | true |
| asort | wartości | rosnąco | zachowane | tak | true |
| arsort | wartości | malejąco | zachowane | tak | true |
| ksort | klucze | rosnąco | zachowane | tak | true |
| krsort | klucze | malejąco | zachowane | tak | true |
Jeżeli nazwa identyfikuje obiekt, np. produkt, asort() może być właściwsze niż sort(), bo zachowuje to powiązanie. W przykładzie kopiujemy dane przed każdą operacją, aby wynik jednego sortowania nie stał się ukrytym wejściem następnego.
Używamy jednorodnych liczb. Ten przykład nie jest gwarancją polskiego porządku alfabetycznego ani instrukcją porównywania mieszanych typów. Takie przypadki wymagają świadomego doboru zasad porównania; nie rozszerzamy tu zakresu lekcji.
sort zmienia klucze, asort je zachowuje
<?php
$scores = ['a' => 3, 'b' => 2, 'c' => 1];
$values = $scores;
sort($values);
print_r($values);
$associated = $scores;
asort($associated);
foreach ($associated as $key => $value) {
echo $key, '=', $value, "\n";
}
Oczekiwany wynik:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
c=1
b=2
a=3
array_map: przekształć każdą wartość
Gdy dla każdego elementu chcesz obliczyć nową wartość, użyj array_map(). Callback, czyli przekazana funkcja, dostaje wartość wejściową i zwraca jej przekształcenie. W tym przykładzie mnoży liczbę przez dwa. Zapis fn($number) => $number * 2 czytaj jako: „weź $number i zwróć $number * 2”.
Funkcja zwraca tablicę wyników, nie zmienia $numbers. Przy dokładnie jednej tablicy wejściowej zachowuje klucze — także tekstowe. Przy wielu tablicach wejściowych wynik otrzymuje kolejne klucze całkowite. To nie jest ta sama reguła w obu wariantach.
Mapowanie nie służy do usuwania elementów na podstawie warunku. Zwrócenie false z callbacku da wartość false w wynikowej tablicy; do wyboru podzbioru służy filtr.
Podwojenie liczb
<?php
$numbers = [1, 2, 3, 4, 5];
$doubled = array_map(fn($number) => $number * 2, $numbers);
print_r($doubled);
echo $numbers[0], "\n";
Oczekiwany wynik:
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
1
array_filter: wybierz część danych
Callback filtra odpowiada na pytanie, czy element ma zostać. Poniżej zostają liczby parzyste, ponieważ reszta z dzielenia przez dwa jest równa zeru. Funkcja zwraca nową tablicę wybranych elementów i zachowuje ich klucze.
Dlatego wynik zawiera klucze 1 i 3, a nie 0 i 1. To prawidłowe zachowanie, nie błąd eksportu lub drukowania. Jeżeli potrzebujesz potem listy o ciągłej numeracji, można użyć array_values(); nie zakładaj jednak, że filtr wykona to automatycznie.
Bez callbacku array_filter() usuwa wartości uznawane za puste/falsey, w tym 0 i "0". Jeżeli takie dane są wartościowe, przekaż własny warunek. Filtrowanie „pustych” i sprawdzanie obecności klucza rozwiązują różne problemy.
Parzyste liczby z zachowaniem kluczy
<?php
$numbers = [1, 2, 3, 4, 5];
$even = array_filter($numbers, fn($number) => $number % 2 === 0);
print_r($even);
Oczekiwany wynik:
Array
(
[1] => 2
[3] => 4
)
Redukcja i zliczanie to różne operacje
W array_reduce() callback otrzymuje akumulator i bieżący element. Zwrócona wartość staje się akumulatorem następnego kroku. Przy sumowaniu startujemy od 0, następnie dodajemy każdą liczbę. W tym przykładzie wynikiem jest liczba 15, a nie tablica liczb.
Wartość początkowa ma znaczenie także dla pustej tablicy: z początkowym 0 redukcja zwróci 0; bez podanego initial zwróci null. Dobierz ją do operacji, którą wykonujesz.
array_count_values() rozwiązuje inne zadanie: zlicza wystąpienia wartości i zwraca mapę wartość => liczność. Przyjmuje do zliczania wartości int i string. Elementy innych typów powodują E_WARNING i nie są zliczane. Nie używaj tej funkcji jako ogólnego licznika dowolnych obiektów, tablic czy booli.
Suma 15 poniżej jest wynikiem redukcji. Częstości owoców 2/2/1 są wynikiem zliczania; każdy przykład ma własne dane i cel.
Sumowanie z początkowym akumulatorem
<?php
$numbers = [1, 2, 3, 4, 5];
$total = array_reduce($numbers, fn($carry, $number) => $carry + $number, 0);
echo $total, "\n";
echo array_reduce([], fn($carry, $number) => $carry + $number, 0), "\n";
Oczekiwany wynik:
15
0
Liczenie powtarzających się owoców
<?php
$products = ['apple', 'pear', 'apple', 'cherry', 'pear'];
print_r(array_count_values($products));
Oczekiwany wynik:
Array
(
[apple] => 2
[pear] => 2
[cherry] => 1
)
Praktyka: konfiguracja, menu i dane podobne do formularza
Zagnieżdżona konfiguracja przechowuje grupy opcji pod nazwami. Dane menu można reprezentować jako listę elementów, a ich podmenu jako kolejną listę. Nie trzeba od razu budować rekurencyjnego generatora HTML, aby przećwiczyć odczyt.
Opcjonalny klucz active odczytujemy przez ?? false. Odróżnia to brak tego pola od bezwarunkowego założenia, że każdy element je ma. Poniższe dane są lokalnymi stałymi; przykład wypisuje tekst do CLI, nie renderuje HTML.
Przy formularzu jest dodatkowa granica: $_POST['email'] ?? '' zapewnia fallback, ale nie gwarantuje stringa. Wejście formularza może mieć kształt tablicy. Zanim walidujesz email przez filter_var(..., FILTER_VALIDATE_EMAIL), sprawdź typ przez is_string().
Drugi przykład używa lokalnego wejścia o kształcie pola formularza, nie obsługuje HTTP i niczego nie wysyła. Walidacja email to nie autoryzacja ani uniwersalne „oczyszczanie”. Przy wyświetlaniu dynamicznego tekstu w HTML stosuje się osobny escaping, np. htmlspecialchars(..., ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); nie jest on ochroną dowolnego URL, SQL lub JavaScript. Pełny handler formularza pozostaje poza tą lekcją.
Zagnieżdżona opcja i opcjonalny stan menu
<?php
$config = ['cache' => ['enabled' => true, 'ttl' => 3600]];
$menu = [
['title' => 'Start', 'active' => true],
['title' => 'Docs'],
];
echo $config['cache']['ttl'], "\n";
foreach ($menu as $item) {
$active = $item['active'] ?? false;
echo $item['title'], ': ', $active ? 'active' : 'inactive', "\n";
}
Oczekiwany wynik:
3600
Start: active
Docs: inactive
Najpierw sprawdź typ, potem waliduj
<?php
$input = ['email' => ['unexpected']];
$email = $input['email'] ?? '';
if (!is_string($email)) {
echo "Odrzucono nieoczekiwany typ\n";
} elseif (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo "Nieprawidlowy email\n";
} else {
echo "Email przeszedl walidacje\n";
}
Oczekiwany wynik:
Odrzucono nieoczekiwany typ
Typowe błędy i ostrożność przy extract
Przy pracy z tablicami najczęściej gubimy kontrakt operacji, a nie jej składnię:
- nie traktuj klucza jako pozycji ani
count()jako następnego indeksu; - nie myl brakującego pola z polem o wartości
null; - nie sprawdzaj istnienia klucza przez
empty(), jeśli0lub"0"mają znaczenie; - nie przypisuj wyniku
sort()jako rzekomej posortowanej tablicy; - po
array_filter()nie zakładaj ciągłych kluczy; - po
array_merge()nie zakładaj zachowania numerycznych identyfikatorów; - nie przenoś stanu zmiennych między przykładami, które mają działać samodzielnie.
extract() tworzy zmienne na podstawie kluczy tablicy w bieżącym zakresie. Domyślny tryb EXTR_OVERWRITE może nadpisać zmienne już obecne. Poniższa demonstracja używa wyłącznie zaufanych stałych danych i pokazuje ryzyko, nie wzorzec zalecanej architektury. Zwykły dostęp przez $data['name'] wyraźniej pokazuje pochodzenie wartości.
Nie stosuj extract() do nieufnych danych, w szczególności pól formularza. Filtrowanie wartości nie usuwa problemu importowania dowolnych nazw zmiennych ani potrzeby osobnego zabezpieczenia wyjścia.
Demonstracja nadpisania, nie wzorzec dla formularza
<?php
$name = 'original';
$trusted = ['name' => 'overwritten'];
$count = extract($trusted);
echo $name, "\n";
echo $count, "\n";
Oczekiwany wynik:
overwritten
1
Ćwiczenia i dalsza nauka
- Utwórz listę trzech owoców. Usuń środkowy klucz przez
unset()i wypisz pary przezforeach. Wyjaśnij, dlaczego pozostałe klucze nie tworzą teraz ciągłej numeracji. - Przygotuj tablicę z nazwanym kluczem o wartości
nulloraz drugą bez tego klucza. Porównajisset(),array_key_exists()i??. Który test odróżnia te dwa przypadki? - Powtórz porównanie
array_merge(),+iarray_replace()na danych z kluczem liczbowym oraz tekstowym. Zanim uruchomisz kod, zapisz przewidywane klucze i wartości. - Posortuj tę samą kopię nazwanych ocen przez
sort()iasort(). W którym wyniku pozostaje informacja, do kogo należała ocena? - Z listy liczb wybierz parzyste, podwój je i oblicz sumę z początkowym
0. Osobno zlicz owoce. Opisz, dlaczego redukcja i zliczanie zwracają różne rodzaje wyniku. - Rozszerz przykład typu pola email o zwykły string oraz nieprawidłowy adres. Sprawdź wszystkie trzy ścieżki, bez dodawania obsługi serwera.
Rozwiązania ćwiczeń nie zostały wykonane jako część przykładów tej lekcji — są zadaniem do samodzielnego sprawdzenia. Jako dalszą naukę wybierz świadome kontrakty danych: oczekiwane klucze, typy wartości, reguły ich walidacji i znaczenie kolejności.
Dokumentacyjne źródła użytych reguł: model tablic, sprawdzanie obecności, sortowanie, funkcje tablicowe, ostrożność przy extract oraz deprecacje PHP 8.5.
- Zakres dotyczy PHP 8.4–8.5; wcześniejsze wersje wspomniano tylko przy różnicach uzasadnionych zatwierdzonym researchem.
- Przykłady lokalnych danych nie są pełnym handlerem formularza ani audytem bezpieczeństwa aplikacji; zaawansowane sortowanie mieszanych typów i locale pozostaje poza zakresem.
Źródła
- PHP Manual — Arrays — PHP Documentation
- PHP Manual — array_key_exists — PHP Documentation
- PHP Manual — Sorting Arrays — PHP Documentation
- PHP Manual — array_map — PHP Documentation
- PHP Manual — extract — PHP Documentation
- PHP 8.5 — Deprecated Features — PHP Documentation