- Wprowadzenie
- Tablice asocjacyjne
- Przeglądanie tablic
- Sortowanie tablic
- Tworzenie stringów z tablic i odwrotnie
Wprowadzenie
Tablice są specyficznym typem zmiennych – to, najprościej mówiąc, zmienne zawierające w sobie uporządkowany zbiór zmiennych. Dostęp do danych uzyskuje się podając odpowiednią liczbę w nawiasie kwadratowym, bezpośrednio po nazwie zmiennej. Liczba ta, to tak zwany indeks – kolejny numer zmiennej w tablicy. Tak samo przypisuje się wartość do tablicy. Przykład:
<? $tablica[0] = "Wpis numer 0"; $tablice[1] = "Wpis numer 1"; $tablica[2] = "Wpis numer 2"; echo $tablica[2]; // Wyświetlony zostanie napis "Wpis numer 2"; ?>
Aby najprościej dodać kolejny wpis na końcu tablicy wystarczy przy przypisywaniu wartości nie wpisywać indeksu do nawiasów kwadratowych. Jeśli w ten sposób dodawane są wpisy do nowej tablicy, to pierwszy wpis ma indeks 0.
Indeks można też podawać ze zmiennej, a nawet z innej tablicy czy funkcji:
<? $tab1[] = 1; $tab1[] = 0; $tab1[] = 3; $tab1[] = 2; $tab2[] = "Pierwszy"; $tab2[] = "Drugi"; $tab2[] = "Trzeci"; $tab2[] = "Czwarty"; echo $tab2[$tab1[2]]; ?>
Elementem tablicy może być każdy typ zmiennej (z innymi tablicami i obiektami włącznie).
Tablice asocjacyjne
W PHP występuje też inny rodzaj tablic, tak zwane tablice asocjacyjne. Są to tablice, w których zamiast indeksów liczbowych używa się identyfikatorów znakowych (kluczy):
<? $tablica['imie'] = 'Jan'; $tablica['nazwisko'] = 'Kowalski'; $tablica['adres'] = 'Polna 1'; echo $tablica['imie'].' '.$tablica['nazwisko'].', ul. '.$tablica['adres']; ?>
W tym miejscu warto wspomnieć o alternatywnym sposobie definiowania tablic, zarówno asocjacyjnychm, jak i indeksowanych numerycznie. Służy temu funkcja array():
<? $tab = array( 'imie' => 'Jan', 'nazwisko' => 'Kowalski', 'adres' => 'Polna 1' ); $tab2 = array(0 => 'zero', 1 => 'jeden', 2 => 'dwa', 3 => 'trzy'); echo $tab['nazwisko'].' '.$tab2[1]; ?>
Przeglądanie tablic
Bardzo często zachodzi potrzeba wykonania operacji na wszystkich elementach tablicy. Sprawa jest prosta jeśli tablica jest zwykłą tablicą z indeksami liczbowymi i znasz ilość tych elementów:
<? $tab[] = 1; $tab[] = 2; $tab[] = 3; $tab[] = 4; $tab[] = 5; for ($x = 0; $x < 5; $x++) { // Pętla wykona się 5 razy (0...4) echo $tab[$x]; } ?>
Sprawa nieco się komplikuje, jeśli nie znasz ilości elementów tablicy. Wtedy z pomocą przychodzi funkcja count($nazwa_tablicy). Zwraca ona ilość elementów w tablicy podanej jako parametr. Wtedy pętla wygląda tak:
<? $tab[] = 1; $tab[] = 2; $tab[] = 3; $tab[] = 4; $tab[] = 5; for ($x = 0; $x < count($tab); $x++) { echo $tab[$x]; } ?>
A co jeśli masz do czynienia z tablicą asocjacyjną? Nawet jeśli znasz ilość jej elementów, to pozostaje kwestia indeksowania. Wykorzystaj konstrukcję foreach():
<? $tab["imie"] = "Jan"; $tab["nazwisko"] = "Kowalski"; $tab["adres"] = "Polna 1"; foreach ($tab as $element) { echo "$element "; } echo ' '; foreach ($tab as $klucz => $element) { echo "$klucz = $element "; } ?>
Pętla wykonuje się dla każdego elementu tablicy. W kolejnych iteracjach bieżący element tablicy przepisywany jest do zmiennej $element. W drugim przykładzie widzisz inny wariant foreach(), pozwalający obok wartości elementu tablicy pobrać także nazwę klucza ($klucz).
Sortowanie tablic
PHP ofertuje cały zestaw funkcji służących do sortowania tablic. Są to: asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), i uksort(). Większość funkcji (oprócz trzech ostatnich) przyjmuje jeden parametr: zmienną zawierającą tablicę do posortowania. Żadna nie zwraca wyniku.
Opis działania poszczególnych funkcji:
- asort() – sortuje tablice asocjacyjne, zachowując przypisanie kluczy do wartości:
<? $owoce = array ("d"=>"mango", "a"=>"papaja", "b"=>"banan", "c"=>"aronia"); asort ($owoce); reset ($owoce); // Funkcja ta powoduje powrót do pierwszego elementu while (list ($klucz, $wartosc) = each ($owoce)) { echo "$klucz = $wartosc\n"; } ?>
Wynikiem działania powyższego przykładu powinno być:
c = aronia b = banan d = mango a = papaja
- arsort() – sortuje w odwrotnej kolejności tablice asocjacyjne, zachowując przypisanie kluczy do wartości. Funkcja prawie identyczna jak poprzednia, tyle że dane sortowane są „od tyłu”,
- ksort() – sortuje tablice asocjacyjne według kluczy. Powyższy przykład po podmianie funkcji asort na ksort powinien dać taki wynik:
a = papaja b = banan c = aronia d = mango
- rsort() – sortuje zwykłe tablice (nieasocjacyjne) w odwróconej kolejności,
- sort() – sortuje zwykłe tablice (nieasocjacyjne) w kolejności alfabetycznej,
- uasort() – funkcja sortująca tablice asocjacyjne za pomocą zdefiniowanej przez użytkownika funkcji porównującej elementy (nazwa funkcji jest podawana za pomocą drugiego parametru),
- usort() – funkcja sortująca zwykłe tablice za pomocą funkcji zdefiniowanej przez użytkownika,
- uksort() – funkcja sortująca tablice asocjacyjne według klucza za pomocą funkcji zdefiniowanej przez użytkownika.
W trzech ostatnich funkcjach sortujących należy jako drugi parametr podać nazwę funkcji porównującej elementy tablicy. Funkcja taka przyjmuje 2 argumenty. Zwracane jest 0 jeśli argumenty są sobie równe, -1 jeśli pierwszy argument jest mniejszy od drugiego, a 1 jeśli jest większy.
Tworzenie stringów z tablic i odwrotnie
PHP umożliwia zamianę stringów na tablice i odwrotnie. Zamiana taka jest bardzo przydatna, jeśli zachodzi potrzeba wyciągnięcia fragmentu danych z ciągu znaków. Załóżmy, że odczytałeś z pliku z danymi linię z loga zapisanego przez licznik WWW: „12/11/2000;19:23:33;Netscape Navigator;192.168.1.1”.
Jak widać dane rozdzielone są średnikami. Do rozdzielania stringów na tablicę służy funkcja explode(). Jako pierwszy parametr przyjmuje ona znak lub dłuższy ciąg, który oddziela kolejne pola, jako drugi parametr – string do rozdzielenia.
Opcjonalnie można podać trzeci argument, który oznacza maksymalną liczbę pól – jeśli jest ich więcej, to ostatnie pole będzie zawierało wszystkie pozostałe pola. Funkcja zwraca tablicę zawierającą kolejne pola. W przykładzie z danymi z licznika wywołanie funkcji powinno wyglądać tak:
<? $dane = "12/11/2000;19:23:33;Netscape;192.168.1.1"; $tablica = explode(";", $dane); foreach ($tablica as $wartosc) { echo "$wartosc "; } ?>
Istnieje także rozszerzona wersja funkcji explode: split(). Różnica polega na tym, że zamiast prostego ciągu znaków rozdzielających pola, akceptuje ona wyrażenia regularne.
Czasem potrzebne jest działanie w drugą stronę: złącznie pól tablicy w jeden ciąg, w którym pola oddzielone są znakiem (lub kilkoma znakami). Do tego celu służy funkcja implode(). Jako pierwszy parametr podawany jest ciąg za pomocą którego „sklejane” są elementy tablicy, a jako drugi – tablica do posklejania.
Zwracany jest string zawierający posklejane elementy. Jako przykład zastosowania może posłużyć zapisywanie danych o użytkowniku w aplikacji licznika odwiedzin – tablica zawiera dane o odwiedzającym, a potrzebny jest ciąg oddzielany średnikami. Wtedy wywołanie funkcji powinno wyglądać tak:
<? $tablica = array('12/11/2000', '19:23:33', 'Netscape', '192.168.1.1'); $dane = implode(";", $tablica); echo $dane; ?>
Hosting stworzony dla WordPressa
Masz stronę WWW na WordPressie? My też uwielbiamy ten system dla stron internetowych. Dlatego stworzyliśmy hosting specjalnie dla jego użytkowników.