Array w PHP, czyli tablica, pozwala przechowywać wiele wartości w jednej zmiennej i odwoływać się do nich za pomocą kluczy. Tablica może zawierać liczby, tekst, wartości logiczne, obiekty, inne tablice, a nawet mieszaninę różnych typów danych. Dzięki temu jest jedną z najczęściej wykorzystywanych struktur podczas programowania w PHP.
Tablice wykorzystuje się między innymi do przechowywania list produktów, danych użytkownika, konfiguracji aplikacji, wyników zapytań, parametrów formularza czy danych pobranych z API. PHP udostępnia przy tym bardzo dużą liczbę funkcji do wyszukiwania, filtrowania, sortowania, łączenia i przekształcania tablic. Warto więc poznać nie tylko podstawowy zapis $array = [], ale również sposób działania kluczy oraz najważniejsze funkcje tablicowe.
Co to jest array w PHP?
W PHP tablica jest strukturą przechowującą pary klucz - wartość. Kluczem może być liczba całkowita albo ciąg znaków, natomiast wartością praktycznie dowolny typ danych obsługiwany przez PHP.
Najprostsza tablica może wyglądać tak:
$colors = ['czerwony', 'zielony', 'niebieski'];
Jedna zmienna $colors przechowuje tutaj trzy osobne wartości.
PHP automatycznie przypisuje im klucze liczbowe:
0 => 'czerwony' 1 => 'zielony' 2 => 'niebieski'
Tablica PHP jest bardziej elastyczna niż klasyczna tablica znana z części innych języków programowania. Może pełnić rolę listy, słownika, mapy czy kolekcji danych.
Jak utworzyć tablicę w PHP?
Obecnie najczęściej stosuje się krótką składnię z nawiasami kwadratowymi:
$numbers = [10, 20, 30];
PHP obsługuje również starszy zapis wykorzystujący konstrukcję array():
$numbers = array(10, 20, 30);
Obie tablice zawierają dokładnie te same dane. W nowym kodzie krótszy zapis z [] jest jednak znacznie częściej spotykany i zazwyczaj bardziej czytelny.
Pustą tablicę możemy utworzyć tak:
$items = [];
A następnie stopniowo dodawać do niej elementy.
Tablica indeksowana
Najprostszy rodzaj tablicy wykorzystuje klucze liczbowe.
$languages = [
'PHP',
'JavaScript',
'Python',
'Java'
];
PHP automatycznie nada kolejnym elementom klucze:
0 1 2 3
Do pierwszej wartości możemy więc odwołać się przez:
echo $languages[0];
Wynik:
PHP
Warto pamiętać, że pierwszy indeks typowej tablicy rozpoczyna się od 0, a nie od 1.
Tablica asocjacyjna
Klucze nie muszą być liczbami. Możemy nadać im własne nazwy i stworzyć tablicę asocjacyjną.
$user = [
'name' => 'Anna',
'age' => 31,
'city' => 'Warszawa'
];
Aby pobrać imię użytkownika, używamy klucza name:
echo $user['name'];
Otrzymamy:
Anna
Tablice asocjacyjne są bardzo użyteczne, ponieważ nazwa klucza od razu informuje, co oznacza dana wartość.
Porównajmy:
$user = ['Anna', 31, 'Warszawa'];
z:
$user = [
'name' => 'Anna',
'age' => 31,
'city' => 'Warszawa'
];
Druga wersja jest dłuższa, ale łatwiej zrozumieć jej strukturę bez znajomości kolejności poszczególnych elementów.
Tablica wielowymiarowa
Wartością elementu tablicy może być kolejna tablica. W ten sposób powstają tablice wielowymiarowe.
Przykładowa lista produktów:
$products = [
[
'name' => 'Monitor',
'price' => 899,
'available' => true
],
[
'name' => 'Klawiatura',
'price' => 249,
'available' => true
],
[
'name' => 'Mysz',
'price' => 129,
'available' => false
]
];
Każdy element głównej tablicy jest tutaj osobną tablicą opisującą jeden produkt.
Aby pobrać cenę drugiego produktu, możemy napisać:
echo $products[1]['price'];
Wynik:
249
Tablice o takiej strukturze bardzo często pojawiają się podczas pracy z wynikami zapytań do baz danych oraz danymi przekształconymi z JSON.
Jak odczytać element tablicy?
Do wartości odwołujemy się przez jej klucz umieszczony w nawiasach kwadratowych.
$cities = ['Warszawa', 'Kraków', 'Gdańsk']; echo $cities[1];
Wynik:
Kraków
W tablicy asocjacyjnej:
$product = [
'name' => 'Laptop',
'price' => 3999
];
echo $product['price'];
Wynikiem będzie:
3999
Odwołanie się do klucza, który nie istnieje, może spowodować ostrzeżenie. Dlatego w kodzie, w którym struktura danych nie jest pewna, warto wcześniej sprawdzić obecność klucza albo zastosować operator ??.
$city = $user['city'] ?? 'brak danych';
Jeżeli klucz city nie istnieje lub jego wartość jest null, do $city zostanie przypisany tekst brak danych.
Dodawanie elementów do tablicy
Nową wartość można dopisać do końca tablicy za pomocą pustych nawiasów kwadratowych:
$colors = ['red', 'green']; $colors[] = 'blue';
Tablica będzie teraz zawierała:
red green blue
Możemy również określić klucz:
$user = []; $user['name'] = 'Anna'; $user['city'] = 'Poznań';
W rezultacie powstanie tablica:
[
'name' => 'Anna',
'city' => 'Poznań'
]
Zmiana wartości elementu
Zmiana istniejącej wartości wygląda podobnie jak przypisanie zwykłej zmiennej.
$prices = [100, 200, 300]; $prices[1] = 250;
Po zmianie:
[100, 250, 300]
W przypadku tablicy asocjacyjnej:
$user = [
'name' => 'Anna',
'age' => 30
];
$user['age'] = 31;
Wartość przypisana do klucza age zostanie zastąpiona.
Usuwanie elementów tablicy
Do usunięcia konkretnego elementu można użyć unset().
$colors = ['red', 'green', 'blue']; unset($colors[1]);
W tablicy pozostaną elementy z kluczami 0 i 2. Samo unset() nie numeruje ponownie pozostałych elementów.
Jeżeli potrzebujemy ponownie kolejnych indeksów liczbowych, można użyć:
$colors = array_values($colors);
Wówczas wartości otrzymają ponownie klucze 0 i 1.
count() - liczba elementów
Jedną z najczęściej używanych funkcji tablicowych jest count().
$languages = ['PHP', 'JavaScript', 'Python']; echo count($languages);
Wynik:
3
count() przydaje się między innymi podczas sprawdzania, czy tablica zawiera elementy:
if (count($products) > 0) {
echo 'Znaleziono produkty';
}
Jeżeli interesuje nas tylko to, czy tablica jest pusta, często czytelniejsze będzie:
if (!empty($products)) {
echo 'Znaleziono produkty';
}
Przeglądanie tablicy za pomocą foreach
Najczęściej używaną konstrukcją do przechodzenia przez elementy tablicy jest foreach.
$languages = ['PHP', 'JavaScript', 'Python'];
foreach ($languages as $language) {
echo $language . '
';
}
Wynik:
PHP JavaScript Python
Jeżeli potrzebujemy również klucza:
$user = [
'name' => 'Anna',
'city' => 'Warszawa'
];
foreach ($user as $key => $value) {
echo $key . ': ' . $value . '
';
}
Daje to:
name: Anna city: Warszawa
Przy tablicach wielowymiarowych można odwoływać się do poszczególnych pól każdego rekordu:
foreach ($products as $product) {
echo $product['name'];
echo ' - ';
echo $product['price'] . ' zł';
echo '
';
}
in_array() - czy wartość znajduje się w tablicy?
Funkcja in_array() pozwala sprawdzić, czy konkretna wartość występuje w tablicy.
$roles = ['admin', 'editor', 'user'];
if (in_array('admin', $roles, true)) {
echo 'Administrator';
}
Funkcja zwraca true, jeżeli znajdzie wartość, albo false, jeżeli jej nie ma.
Trzeci argument ustawiony na true włącza ścisłe porównywanie typów. Jest to często bezpieczniejsza wersja:
in_array($value, $array, true)
Dzięki temu liczba 10 nie jest traktowana tak samo jak tekst '10'.
array_search() - wyszukiwanie klucza
array_search() działa podobnie do in_array(), ale zamiast odpowiedzi true lub false zwraca klucz znalezionej wartości.
$colors = ['red', 'green', 'blue'];
$key = array_search('green', $colors, true);
echo $key;
Wynik:
1
Jeżeli wartość nie zostanie znaleziona, funkcja zwraca false.
Dlatego wynik warto sprawdzać za pomocą ścisłego porównania:
$key = array_search('red', $colors, true);
if ($key !== false) {
echo 'Znaleziono element';
}
Jest to ważne, ponieważ prawidłowym kluczem znalezionego elementu może być 0.
array_key_exists() - sprawdzanie klucza
Jeżeli chcemy sprawdzić nie wartość, lecz obecność konkretnego klucza, możemy użyć array_key_exists().
$user = [
'name' => 'Anna',
'email' => null
];
if (array_key_exists('email', $user)) {
echo 'Klucz istnieje';
}
Funkcja sprawdzi, czy klucz email rzeczywiście został utworzony.
Nie jest to dokładnie to samo co isset(). Dla elementu o wartości null:
isset($user['email'])
zwróci false, natomiast:
array_key_exists('email', $user)
potwierdzi istnienie klucza.
array_keys() i array_values()
array_keys() tworzy tablicę zawierającą wszystkie klucze.
$user = [
'name' => 'Anna',
'age' => 30,
'city' => 'Gdańsk'
];
$keys = array_keys($user);
$keys będzie zawierało:
['name', 'age', 'city']
Z kolei:
$values = array_values($user);
utworzy:
['Anna', 30, 'Gdańsk']
array_values() jest również wygodne wtedy, gdy po usuwaniu lub filtrowaniu elementów chcemy ponownie nadać im kolejne indeksy liczbowe.
array_merge() - łączenie tablic
Dwie lub więcej tablic można połączyć funkcją array_merge().
$frontend = ['HTML', 'CSS']; $backend = ['PHP', 'MySQL']; $technologies = array_merge($frontend, $backend);
Wynik:
['HTML', 'CSS', 'PHP', 'MySQL']
Funkcja jest również użyteczna przy tablicach asocjacyjnych:
$defaults = [
'theme' => 'light',
'language' => 'pl'
];
$userSettings = [
'theme' => 'dark'
];
$settings = array_merge($defaults, $userSettings);
Dla powtarzających się kluczy tekstowych późniejsza wartość zastąpi wcześniejszą. W tym przykładzie theme będzie miało wartość dark.
Sortowanie tablic w PHP
PHP udostępnia kilka funkcji sortujących, ponieważ sposób sortowania zależy od tego, czy chcemy zachować klucze tablicy.
| Funkcja | Działanie |
|---|---|
sort() |
Sortuje wartości rosnąco i nadaje nowe klucze liczbowe. |
rsort() |
Sortuje wartości malejąco. |
asort() |
Sortuje wartości rosnąco i zachowuje powiązanie z kluczami. |
arsort() |
Sortuje wartości malejąco i zachowuje klucze. |
ksort() |
Sortuje według kluczy rosnąco. |
krsort() |
Sortuje według kluczy malejąco. |
Przykład:
$numbers = [20, 5, 100, 12]; sort($numbers);
Po sortowaniu:
[5, 12, 20, 100]
W przypadku danych asocjacyjnych często ważne jest zachowanie kluczy:
$prices = [
'monitor' => 899,
'mouse' => 129,
'keyboard' => 249
];
asort($prices);
Elementy zostaną uporządkowane według ceny, ale nazwy produktów nadal pozostaną przypisane do swoich wartości.
array_map() - zmiana wszystkich elementów
array_map() wykonuje wskazaną operację dla każdego elementu tablicy i zwraca nową tablicę.
Załóżmy, że chcemy podwoić wszystkie liczby:
$numbers = [1, 2, 3, 4];
$doubled = array_map(
function ($number) {
return $number * 2;
},
$numbers
);
Wynik:
[2, 4, 6, 8]
Przy funkcji strzałkowej zapis może być krótszy:
$doubled = array_map(
fn($number) => $number * 2,
$numbers
);
Oryginalna tablica $numbers pozostaje bez zmian. Wynik znajduje się w nowej tablicy.
array_filter() - filtrowanie tablicy
array_filter() pozwala pozostawić tylko elementy spełniające określony warunek.
$numbers = [5, 12, 3, 20, 8, 30];
$greaterThan10 = array_filter(
$numbers,
fn($number) => $number > 10
);
W tablicy wynikowej znajdą się:
12 20 30
Warto pamiętać, że array_filter() zachowuje istniejące klucze. Jeżeli potrzebujemy nowych kolejnych indeksów, możemy połączyć ją z array_values():
$greaterThan10 = array_values(
array_filter(
$numbers,
fn($number) => $number > 10
)
);
array_reduce() - redukcja tablicy do jednej wartości
array_reduce() służy do przetworzenia wielu elementów tablicy do jednej wartości.
Przykładem może być obliczenie sumy:
$prices = [100, 250, 50];
$total = array_reduce(
$prices,
fn($sum, $price) => $sum + $price,
0
);
echo $total;
Wynik:
400
W przypadku zwykłego sumowania PHP oferuje oczywiście prostszą funkcję array_sum(). array_reduce() jest jednak przydatne przy bardziej niestandardowych operacjach.
array_fill() - tworzenie tablicy wypełnionej wartością
array_fill() pozwala utworzyć określoną liczbę elementów mających początkowo tę samą wartość.
$status = array_fill(0, 5, false);
Powstanie tablica:
[
false,
false,
false,
false,
false
]
Pierwszy argument określa początkowy indeks, drugi liczbę tworzonych elementów, a trzeci ich wartość.
To nie jest wyłącznie funkcja do sztucznych przykładów. Tablice wypełnione wartościami początkowymi są wykorzystywane także w rzeczywistych algorytmach. Dobrym przykładem jest Sito Eratostenesa opisane w serwisie Era Informatyki. W pokazanej tam implementacji PHP funkcja array_fill() tworzy tablicę wartości logicznych, a kolejne indeksy służą do oznaczania liczb jako pierwszych lub złożonych.
Uproszczony fragment tego rodzaju rozwiązania może wyglądać tak:
$numbers = array_fill(0, 11, true); $numbers[0] = false; $numbers[1] = false;
Tablica staje się tutaj strukturą reprezentującą stan kolejnych liczb. To dobry przykład pokazujący, że tablice PHP nie służą jedynie do przechowywania list nazw czy produktów, ale mogą być podstawowym elementem działania algorytmu.
Destrukturyzacja tablic
Jeżeli znamy strukturę tablicy, jej elementy można przypisać do osobnych zmiennych.
$user = ['Anna', 30, 'Kraków']; [$name, $age, $city] = $user;
Po wykonaniu:
$name = 'Anna' $age = 30 $city = 'Kraków'
Destrukturyzację można stosować również z kluczami tekstowymi:
$user = [
'name' => 'Anna',
'city' => 'Kraków'
];
[
'name' => $name,
'city' => $city
] = $user;
Rozwiązanie może być wygodne, gdy funkcja zwraca tablicę zawierającą kilka znanych wartości.
Najczęstsze błędy przy tablicach w PHP
Odwołanie do nieistniejącego klucza
Kod:
echo $user['phone'];
zakłada, że phone istnieje. Jeżeli dane mogą mieć różną strukturę, bezpieczniejsze może być:
$phone = $user['phone'] ?? null;
Mylenie wartości z kluczem
W pętli:
foreach ($products as $id => $product)
$id jest kluczem, a $product wartością. Czytelne nazewnictwo znacznie zmniejsza ryzyko pomyłki.
Zakładanie, że indeksy są zawsze kolejne
Po usunięciu albo filtrowaniu elementów tablica może wyglądać tak:
[
0 => 'A',
2 => 'C',
5 => 'F'
]
Nie należy wtedy zakładać, że $array[1] istnieje. Jeżeli potrzebne są kolejne indeksy, możemy zastosować array_values().
Użycie array_search() bez ścisłego sprawdzania wyniku
Niepoprawna konstrukcja:
if (array_search('PHP', $languages)) {
echo 'Znaleziono';
}
może zawieść, jeżeli znaleziony element ma klucz 0. Poprawniej:
$key = array_search('PHP', $languages, true);
if ($key !== false) {
echo 'Znaleziono';
}
Niepotrzebne komplikowanie prostych operacji
PHP ma wiele gotowych funkcji tablicowych. Nie zawsze warto pisać pętlę tylko po to, aby policzyć elementy, sprawdzić występowanie wartości, zsumować liczby albo posortować tablicę.
| Zadanie | Przydatna funkcja |
|---|---|
| Policz elementy | count() |
| Sprawdź wartość | in_array() |
| Znajdź klucz wartości | array_search() |
| Pobierz klucze | array_keys() |
| Pobierz wartości | array_values() |
| Połącz tablice | array_merge() |
| Przekształć elementy | array_map() |
| Odfiltruj elementy | array_filter() |
| Suma liczb | array_sum() |
FAQ - PHP array
Array w PHP to tablica przechowująca wiele wartości w jednej zmiennej. Każda wartość jest powiązana z kluczem liczbowym albo tekstowym. Tablica może zawierać między innymi tekst, liczby, wartości logiczne, obiekty oraz kolejne tablice.
Najczęściej stosuje się krótką składnię z nawiasami kwadratowymi, na przykład $colors = ['red', 'green', 'blue'];. Dostępna jest również starsza składnia array('red', 'green', 'blue').
Do końca tablicy można dopisać element za pomocą pustych nawiasów, na przykład $array[] = 'nowa wartość';. Można również wskazać konkretny klucz, na przykład $user['name'] = 'Anna';.
Do usuwania konkretnego elementu można użyć unset(), na przykład unset($array[2]);. Usunięcie elementu nie powoduje automatycznego ponownego numerowania pozostałych kluczy.
Liczbę elementów zwraca funkcja count(). Przykładowo count($array) zwróci liczbę elementów znajdujących się w tablicy.
Do sprawdzania wartości służy in_array(). W wielu przypadkach warto używać ścisłego porównania, na przykład in_array($value, $array, true), aby PHP uwzględniało również typ danych.
Można użyć funkcji array_key_exists(). Jest ona szczególnie przydatna, gdy klucz może istnieć, ale jego wartością jest null.
Tablica indeksowana wykorzystuje przede wszystkim klucze liczbowe, na przykład 0, 1 i 2. Tablica asocjacyjna wykorzystuje opisowe klucze tekstowe, takie jak name, email czy price.
Tak. Elementem tablicy może być kolejna tablica. W ten sposób tworzy się tablice wielowymiarowe, często wykorzystywane do przechowywania list produktów, użytkowników, wyników zapytań i innych bardziej złożonych danych.
Najczęściej wykorzystuje się do tego pętlę foreach. Konstrukcja foreach ($array as $value) pobiera kolejne wartości, a foreach ($array as $key => $value) udostępnia również ich klucze.
PHP array - podsumowanie
Tablice należą do najważniejszych struktur danych w PHP. Prosta tablica może być listą kilku wartości, ale ta sama konstrukcja pozwala również tworzyć rozbudowane struktury opisujące produkty, użytkowników, konfigurację aplikacji czy wyniki pobierane z innych systemów.
Podstawy są stosunkowo proste: tablicę tworzymy za pomocą [], element odczytujemy przez jego klucz, nową wartość możemy dopisać przez $array[], a usunąć za pomocą unset(). Przy bardziej rozbudowanych operacjach przydają się funkcje takie jak count(), in_array(), array_search(), array_merge(), array_map() czy array_filter().
Warto zwracać uwagę na klucze. PHP nie wymaga, aby indeksy liczbowe zawsze tworzyły ciąg 0, 1, 2, 3, a część operacji zachowuje dotychczasowe klucze. Jest to częsta przyczyna błędnych założeń, szczególnie po filtrowaniu i usuwaniu elementów.
Najlepszym sposobem nauki tablic jest używanie ich w realnych zadaniach: przechowywaniu danych formularza, generowaniu listy produktów, filtrowaniu wyników czy implementowaniu prostych algorytmów. Wtedy funkcje tablicowe przestają być listą poleceń do zapamiętania i zaczynają tworzyć spójny zestaw narzędzi do pracy z danymi.

Komentarze