PHP array - tablice w PHP, funkcje i przykłady

PHP array - tablice w PHPArray 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() 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

Co to jest array w PHP?

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.

Jak utworzyć tablicę w PHP?

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').

Jak dodać element do tablicy PHP?

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';.

Jak usunąć element tablicy?

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.

Jak sprawdzić liczbę elementów tablicy?

Liczbę elementów zwraca funkcja count(). Przykładowo count($array) zwróci liczbę elementów znajdujących się w tablicy.

Jak sprawdzić, czy wartość znajduje 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.

Jak sprawdzić, czy klucz istnieje w tablicy?

Można użyć funkcji array_key_exists(). Jest ona szczególnie przydatna, gdy klucz może istnieć, ale jego wartością jest null.

Czym różni się tablica indeksowana od asocjacyjnej?

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.

Czy tablica PHP może zawierać inne tablice?

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.

Jak przejść przez wszystkie elementy tablicy?

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