Lekcja 9: Funkcje Wbudowane PHP do Pracy z Tablicami
Witaj w dziewiątej lekcji kursu PHP! W poprzedniej lekcji dogłębnie poznaliśmy tablice – jak je tworzyć, czym są tablice indeksowane, asocjacyjne i wielowymiarowe, oraz jak wykonywać na nich podstawowe operacje. PHP oferuje jednak znacznie więcej narzędzi do pracy z tym wszechstronnym typem danych. Istnieje bogaty zestaw wbudowanych funkcji, które znacznie ułatwiają i przyspieszają manipulowanie tablicami. W tej lekcji przyjrzymy się najważniejszym i najczęściej używanym funkcjom tablicowym, które pozwalają na sortowanie, przeszukiwanie, filtrowanie, łączenie, dzielenie i transformowanie tablic.
Dlaczego funkcje tablicowe są ważne?
Praca z tablicami jest codziennością w programowaniu w PHP. Niezależnie od tego, czy przetwarzasz dane z formularza, wyniki zapytania do bazy danych, czy konfigurację aplikacji, tablice są wszędzie. Wbudowane funkcje tablicowe dostarczają zoptymalizowanych i przetestowanych rozwiązań dla typowych zadań. Używanie ich zamiast pisania własnej logiki od zera nie tylko oszczędza czas, ale także prowadzi do bardziej czytelnego, wydajnego i mniej podatnego na błędy kodu. Znajomość tych funkcji jest kluczowa dla każdego programisty PHP.
Podstawowe Funkcje Informacyjne i Modyfikujące Rozmiar
Z niektórymi z tych funkcji spotkaliśmy się już wcześniej, ale warto je przypomnieć w kontekście pełnego zestawu narzędzi:
count($tablica)
/sizeof($tablica)
: Zwraca liczbę elementów w tablicy.is_array($zmienna)
: Sprawdza, czy zmienna jest tablicą.array_push(&$tablica, $wartosc1, ...)
: Dodaje jeden lub więcej elementów na koniec tablicy. Zwraca nową liczbę elementów. Modyfikuje oryginalną tablicę (przekazywanie przez referencję).$tablica[] = $wartosc;
: Bardziej zwięzły sposób na dodanie elementu na koniec tablicy indeksowanej.array_pop(&$tablica)
: Usuwa i zwraca ostatni element tablicy. Modyfikuje oryginalną tablicę.array_unshift(&$tablica, $wartosc1, ...)
: Dodaje jeden lub więcej elementów na początek tablicy. Klucze numeryczne są reindeksowane. Modyfikuje oryginalną tablicę.array_shift(&$tablica)
: Usuwa i zwraca pierwszy element tablicy. Klucze numeryczne są reindeksowane. Modyfikuje oryginalną tablicę.unset($tablica[$klucz])
: Usuwa element o podanym kluczu. Nie reindeksuje kluczy numerycznych.
<?php
$owoce = ["jabłko", "banan", "pomarańcza"];
echo "Liczba owoców: " . count($owoce) . "<br>"; // 3
array_push($owoce, "gruszka", "śliwka");
print_r($owoce); // Array ( [0] => jabłko [1] => banan [2] => pomarańcza [3] => gruszka [4] => śliwka )
echo "<br>";
$ostatniOwoc = array_pop($owoce);
echo "Usunięto: $ostatniOwoc<br>"; // śliwka
print_r($owoce);
echo "<br>";
array_unshift($owoce, "mango");
print_r($owoce); // Array ( [0] => mango [1] => jabłko [2] => banan [3] => pomarańcza [4] => gruszka )
echo "<br>";
$pierwszyOwoc = array_shift($owoce);
echo "Usunięto z początku: $pierwszyOwoc<br>"; // mango
print_r($owoce);
echo "<br>";
?>
Wyszukiwanie w Tablicach
PHP dostarcza kilku funkcji do wyszukiwania wartości lub kluczy w tablicach:
in_array($szukana_wartosc, $tablica, $scisle = false)
: Sprawdza, czy$szukana_wartosc
istnieje w$tablica
. Zwracatrue
lubfalse
. Opcjonalny trzeci parametr$scisle
(boolean) określa, czy użyć ścisłego porównania (===
).array_search($szukana_wartosc, $tablica, $scisle = false)
: Wyszukuje$szukana_wartosc
w$tablica
i zwraca klucz pierwszego pasującego elementu. Jeśli wartość nie zostanie znaleziona, zwracafalse
. Należy uważać przy sprawdzaniu wyniku, ponieważ klucz0
również jest ewaluowany jakofalse
w luźnym porównaniu (if ($wynik)
). Zawsze używaj ścisłego porównania zfalse
(if ($wynik !== false)
).array_key_exists($klucz, $tablica)
: Sprawdza, czy dany$klucz
istnieje w$tablica
. Działa dla kluczy numerycznych i stringowych.isset($tablica[$klucz])
: Sprawdza, czy klucz istnieje i czy jego wartość nie jestNULL
.
<?php
$liczby = [10, 20, "30", 40, 50, 20];
if (in_array("30", $liczby)) { // Luźne porównanie, "30" == 30
echo "Wartość \"30\" (string) jest w tablicy (in_array luźne).<br>";
}
if (in_array(30, $liczby, true)) { // Ścisłe porównanie
echo "Wartość 30 (int) jest w tablicy (in_array ścisłe).<br>";
} else {
echo "Wartość 30 (int) NIE jest w tablicy przy ścisłym porównaniu z \"30\".<br>";
}
$kluczDwudziestki = array_search(20, $liczby);
if ($kluczDwudziestki !== false) {
echo "Pierwsze wystąpienie wartości 20 ma klucz: $kluczDwudziestki<br>"; // Klucz: 1
}
$kluczNieistniejacy = array_search(100, $liczby);
if ($kluczNieistniejacy === false) {
echo "Wartość 100 nie została znaleziona w tablicy.<br>";
}
$dane = ["a" => "Alpha", "b" => "Beta", 0 => "Zero"];
if (array_key_exists("a", $dane)) {
echo "Klucz 'a' istnieje.<br>";
}
if (array_key_exists(0, $dane)) {
echo "Klucz 0 istnieje.<br>";
}
if (!array_key_exists("c", $dane)) {
echo "Klucz 'c' nie istnieje.<br>";
}
?>
Sortowanie Tablic
PHP oferuje szeroką gamę funkcji do sortowania tablic. Różnią się one tym, czy sortują według wartości czy kluczy, czy zachowują powiązania klucz-wartość, kierunkiem sortowania (rosnąco/malejąco) oraz sposobem porównywania elementów.
Sortowanie według wartości:
sort(&$tablica, $flagi_sortowania = SORT_REGULAR)
: Sortuje tablicę rosnąco według wartości. Klucze są tracone i zastępowane nowymi indeksami numerycznymi od 0.rsort(&$tablica, $flagi_sortowania = SORT_REGULAR)
: Sortuje tablicę malejąco według wartości. Klucze są tracone.asort(&$tablica, $flagi_sortowania = SORT_REGULAR)
: Sortuje tablicę asocjacyjną rosnąco według wartości, zachowując powiązania klucz-wartość.arsort(&$tablica, $flagi_sortowania = SORT_REGULAR)
: Sortuje tablicę asocjacyjną malejąco według wartości, zachowując powiązania klucz-wartość.
Sortowanie według kluczy:
ksort(&$tablica, $flagi_sortowania = SORT_REGULAR)
: Sortuje tablicę asocjacyjną rosnąco według kluczy.krsort(&$tablica, $flagi_sortowania = SORT_REGULAR)
: Sortuje tablicę asocjacyjną malejąco według kluczy.
Flagi sortowania (opcjonalny drugi parametr):
SORT_REGULAR
: Porównuje elementy normalnie (domyślnie).SORT_NUMERIC
: Porównuje elementy jako liczby.SORT_STRING
: Porównuje elementy jako ciągi znaków.SORT_LOCALE_STRING
: Porównuje elementy jako ciągi znaków, bazując na bieżących ustawieniach regionalnych (locale).SORT_NATURAL
: Sortuje ciągi znaków